PowerShell检测OpenSSH安装状态时无法获取对象属性问题排查
错误原因
原脚本的Where-Object筛选逻辑错误:你指定了筛选Name属性后,连续添加了两个互斥的-like匹配规则,且Installed是功能的State属性取值,不属于Name属性的匹配范围,所以永远无法匹配到有效对象,导致无法获取属性。
修正后脚本
简洁写法(接近原脚本结构)
if (Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH.Server*' -and $_.State -eq 'Installed'}) { Write-Output "OpenSSH 服务端已安装" exit 0 } # 未安装时的后续执行代码写在此处
可读性更强的写法
# 获取OpenSSH.Server的安装状态 $openSshServer = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' if ($openSshServer.State -eq 'Installed') { Write-Output "OpenSSH 服务端已安装" exit 0 } # 未安装时的后续执行代码写在此处
补充说明
- 若需要检测OpenSSH客户端,将筛选规则中的
OpenSSH.Server*替换为OpenSSH.Client*即可 - 脚本匹配到已安装状态后会直接执行
exit 0终止运行,符合终止后续代码的需求
内容的提问来源于stack exchange,提问作者Dawid Lis
相关产品推荐
相关产品推荐

