2011-12-31 1 views
0

Я бегу тест на серверах с помощью следующей строки:фильтр вывода (где-объект) от переменной

Get-WmiObject Win32_Service -ComputerName "myserver" -Filter "State='Running'" | 
where-object ??? }| Foreach-Object { 
       New-Object -TypeName PSObject -Property @{ 
        DisplayName=$_.DisplayName 
        State=$_.State 
       } | Select-Object DisplayName,State 
      # Export all info to CSV 
      } | ft -AutoSize 

Я хотел бы создать переменную так:

$IgnoreServices = '"Wireless Configuration","Telephony","Secondary Logon" 

и отправить это в Where-Object. Я могу сделать это?

Суне :)

EDIT: После некоторого R/T (исследования и пытается :)) Я узнал, что я могу это сделать:

$IgnoreServices = {$_.DisplayName -ne "Wireless Configuration" 
-and $_.DisplayName -ne "Telephony" -and $_.DisplayName -ne "Secondary Logon" 
-and $_.DisplayName -ne "Windows Event Collector"} 

Get-WmiObject Win32_Service -ComputerName "myserver" -Filter "State='Running'"|  where-object $IgnoreServices | Foreach-Object { 
       # Set new objects for info gathered with WMI 
       New-Object -TypeName PSObject -Property @{ 
        DisplayName=$_.DisplayName 
        State=$_.State 
       } | Select-Object DisplayName,State 
      # Export all info to CSV 
      } | ft -AutoSize 

Но .. Я бы очень хотел, если можно указать услуги, которые должны быть исключены следующим образом: «service1», «service2», «service3»

Как всегда, вся помощь очень ценится!

+0

Просто ключ k tip: вам не нужен «select». Результат select-object также является psobject, и поскольку вы выбираете все свойства исходных объектов, это избыточная операция. – x0n

ответ

5

Да, вы можете просто сделать:

$IgnoreServices = "Wireless Configuration","Telephony","Secondary Logon" 

, как вы хотели, и сделать следующее в где-объект:

where-object { $IgnoreServices -notcontains $_.DisplayName } 
+0

Ты ниндзя !! Работает как шарм !! Большое спасибо!! – Sune

2

Вы можете сделать это с помощью фильтра WMI (работает быстрее), и поскольку вы только выбираете свойства, нет необходимости создавать новые объекты, используйте командлет instaed:

$filter = "State='Running' AND Name <> 'Wireless Configuration' AND Name <> 'Telephony' AND Name <> 'Secondary Logon'" 

Get-WmiObject Win32_Service -ComputerName myserver -Filter $filter | Select-Object DisplayName,State 
+0

Спасибо Шей и @manojlds! Я удалю новый объект (я использую это в другом get-wmi и не знаю, что мне это не нужно.) Мой список услуг «черного списка» оказался довольно обширным. Как бы я прочитал список из текстового файла? – Sune

+1

Это построит фильтр динамически, если у вас есть текстовый файл с именем службы в каждой строке: $ svc = Get-Content. \ Svc.txt | Foreach-Object {"AND Name <> '{0}'" -f $ _}; $ filter = "State = 'Running'" + ($ svc -join '') –

+0

Как использовать это в моем запросе get-wmi? Я пробовал прямо и, позвонив с помощью -filter $ svc безрезультатно .. – Sune

Смежные вопросы