powershell дождитесь завершения команды, прежде чем продолжить

В powershell я пытаюсь сделать следующее:

$name = "computername"
#get installed programs
Write-Host "****APPLICATIONS"
gwmi win32_Product -ComputerName $name | select name

#gets services
write-host "****SERVICES"
Get-Service -ComputerName $name | ft

ожидаемый результат будет

****APPLICATIONS
name
of
app

****SERVICES
running services here
more services here

фактический результат

****APPLICATIONS
****SERVICES
name
of
app
running services here
more services here

Я попытался выполнить start-job, затем wait-job, но запуск gwmi в качестве задания, похоже, ничего не выводит на консоль, а отправка вывода в отдельный файл противоречит цели других частей скрипта.

Я также пытался использовать start-sleep, и он по-прежнему завершает обе команды write-host, прежде чем продолжить.


person Cpt.Whale    schedule 12.01.2017    source источник
comment
Хотя Win32_Product может работать, это обычно считается плохим способом получения информации об установленном программном обеспечении. Даже Microsoft Hey Scripting Guys написали статьи о том, насколько это плохо. Я бы посоветовал посмотреть этот ответ для более быстрой альтернативы.   -  person StephenP    schedule 13.01.2017


Ответы (2)


Попробуй это:

$name = "computername"
Write-Host "`n****APPLICATIONS`n"
gwmi win32_Product -ComputerName $name | % {$_.name}
write-host "`n****SERVICES"
Get-Service -ComputerName $name | ft

Если вы хотите, чтобы результаты были в алфавитном порядке:

$name = "computername"
Write-Host "`n****APPLICATIONS`n"
$apps = gwmi win32_Product -ComputerName $name | % {$_.name}
$apps | sort
write-host "`n****SERVICES"
Get-Service -ComputerName $name | ft
person Ash Housewares    schedule 12.01.2017
comment
это работает отлично, не могли бы вы немного объяснить, что здесь делает `n? Я никогда не видел эту нотацию в powershell - person Cpt.Whale; 13.01.2017
comment
@ user19702 - Это для новой строки. Это просто упрощает чтение вывода, помещая пустую строку между наборами данных. Без этих символов не было бы пробела между строками Write-Host и списками приложений и служб. Если вы хотите увидеть разницу, вы можете удалить их и запустить. - person Ash Housewares; 13.01.2017

person    schedule
comment
Вы должны попробовать блок параметров вместо переменной. Таким образом, вы можете указать C:\Scripts\ComputerInfo.ps1 -ComputerName MyComputer1, и он запустит скрипт с этим параметром. - person Shawn Esterman; 13.01.2017
comment
Также я считаю, что вам просто нужно изменить свой скрипт, чтобы расширить свойство Name до строк. В настоящее время они будут иметь тип: Selected.System.Management.ManagementObject. - person Shawn Esterman; 13.01.2017
comment
Также добавлена ​​сортировка и выбор только запущенных сервисов. - person Shawn Esterman; 13.01.2017