如果调用命令Powershell中有其他命令

如果调用命令Powershell中有其他命令,powershell,if-statement,registry,scriptblock,Powershell,If Statement,Registry,Scriptblock,我正在尝试运行下面的命令,以说明如果此注册表项存在,则获取ItemProperty,否则不执行任何操作或显示文本以进行测试 "SQL Server Product Name" = Invoke-Command -ComputerName $Computer -ScriptBlock {If (Test-Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names") { Get-ItemProperty HKLM:\Soft

我正在尝试运行下面的命令,以说明如果此注册表项存在,则获取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键不存在,它会将{}放在结果中,而不是空话。我不完全确定if语句是否工作,因为我认为它可能只是在运行Get ItemProperty,不管发生什么,因为如果该路径存在,我会得到预期的结果。

您的示例的问题是
Else
脚本块使用
Write Host
。在远程计算机上执行此操作时,主机是该远程计算机上的PowerShell会话。您正在将文本写入远程计算机上没有GUI的会话


要解决此问题,只需删除
Write-Host
cmdlet。在远程会话上执行时,引用的文本将与scriptblock输出的任何其他内容一起传递回本地会话。

示例的问题是,
else
scriptblock使用
写入主机。在远程计算机上执行此操作时,主机是该远程计算机上的PowerShell会话。您正在将文本写入远程计算机上没有GUI的会话

要解决此问题,只需删除
Write-Host
cmdlet。在远程会话上执行时,引用的文本将与scriptblock输出的任何其他内容一起传递回本地会话