2016-12-01 3 views
0

Я пытаюсь запустить приведенную ниже команду, чтобы сказать, существует ли этот раздел реестра, а Get-ItemProperty Else ничего не делать или отображать текст для тестирования.Если Else внутри Invoke-Command Powershell

"SQL Server Product Name" = Invoke-Command -ComputerName $Computer -ScriptBlock {If (Test-Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names") { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object -FilterScript { (($_.Publisher -like "Microsoft*") -and ($_.DisplayName -like "Microsoft SQL Server*(*-bit)")) } | Select-Object -first 1 -ExpandProperty DisplayName } else {Write-Host "Blah"}} 

остальное, кажется, не делать ничего, потому что прямо сейчас, если ключ р не существует, то он помещает в {} к результатам, а не скучное. Я не совсем уверен, что оператор If работает вообще, поскольку я думаю, что он может просто запускать Get-ItemProperty независимо от того, поскольку, если этот путь существует, я получаю ожидаемые результаты.

ответ

2

Проблема с вашим примером заключается в том, что сценарий Else использует Write-Host. Когда вы выполняете это на удаленном компьютере, хост является сеансом PowerShell на этом удаленном компьютере. Вы пишете текст на сеансе без GUI на удаленной машине.

Чтобы устранить это, просто удалите командлет Write-Host. Выбранный текст будет передан обратно на ваш локальный сеанс вместе с чем-либо еще, выводимым скриптблоком, когда он будет выполнен на удаленном сеансе.

+0

OMG, спасибо, подумал, что сошел с ума. – pinchepooch

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