Фильтр вывода (где-объект) из переменной - PullRequest
0 голосов
/ 31 декабря 2011

Я запускаю тест на серверах со следующей строкой:

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,Могу ли я сделать это?

Sune:)

РЕДАКТИРОВАТЬ: После некоторого 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"

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

Ответы [ 2 ]

5 голосов
/ 31 декабря 2011

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

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

, как вы хотели, и выполните в объекте where следующее:

where-object { $IgnoreServices -notcontains $_.DisplayName  }
2 голосов
/ 31 декабря 2011

Это можно сделать с помощью фильтра WMI (работает быстрее), и поскольку вы выбираете только свойства, создавать новые объекты не нужно, используйте команду Select-Object:

$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
...