2016-12-01 75 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