2016-12-01 77 views
0

我試圖運行下面的命令來說這個註冊表項是否存在,然後Get-ItemProperty Else什麼都不做或顯示測試文本。如果否則在調用命令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"}} 

的else似乎並沒有做任何事情,因爲如果REG鍵不存在,現在,它把在{}的結果,而不是胡說。我不確定If語句是否可以工作,因爲我認爲它可能只是運行Get-ItemProperty,無論如何,因爲如果該路徑存在,我會得到預期的結果。

回答

2

您的示例的問題是Else scriptblock使用Write-Host。在遠程計算機上執行此操作時,主機是該遠程計算機上的PowerShell會話。您正在將文本寫入遠程計算機上沒有GUI的會話。

要解決此問題,只需刪除Write-Host cmdlet。帶引號的文本將在遠程會話上執行時被傳回到本地會話以及scriptblock輸出的任何其他內容。

+0

OMG,謝謝,以爲我瘋了。 – pinchepooch