2015-01-08 4 views
3

Я хочуВ трубопроводе переменного приращения

а) Показать все результаты для данной услуги, если найдено

б) Если никакие службы не будут найдены на всех, выведено соответствующее сообщение об ошибке

Код ниже достигнет a), как я могу достичь b) самым аккуратным образом. Могу ли я расширить трубку, чтобы она проделала что-то вроде | Set-Variable $ serviceCount ++, а затем проверить эту переменную, и если она равна нулю, отобразится сообщение?

foreach($service in $services) 
{   
    Get-Service | where {$_.Name -eq $service} 
} 

ответ

4

Параметр Get-Service командлета -Name принимает массив String с, так что вы можете заменить петлю просто:

Get-Service -Name $services 

Чтобы проверить, как были возвращены многие услуги, вы можете взять результат Get-Service вызова, преобразовать его в массив (если это не один уже есть), и сохранить его в переменной:

$results = @(Get-Service -Name $services) 

Тогда проверьте длину массива:

if ($results.Length -eq 0) 
{ 
    Write-Warning 'No services were found!' 
} 

Обратите внимание, что ошибка будет сгенерирована для каждого имени, переданного параметр -Name, что не соответствует установленной службе. Вы можете устранить эти ошибки, используя параметр -ErrorAction:

Get-Service -Name $services -ErrorAction SilentlyContinue 
Смежные вопросы