Если иначе в PowerShell Invoke-Command

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

"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"}}

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

1 ответ

Решение

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

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

Другие вопросы по тегам