You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本问题:检查计算机是否属于指定OU并执行对应操作

问题原因及修正方案

你的代码问题出在Select Name返回的是带Name属性的对象数组,不是纯字符串数组。-contains运算符在这里是检查数组中是否包含某个对象,而不是匹配对象的属性值,所以即使计算机名存在,条件也始终不成立。

修正方法(三种可选)

方法1:展开Name属性为字符串数组

把Select Name替换成Select -ExpandProperty Name,这样$pccheck就变成纯计算机名字符串数组,-contains可以正常匹配:

$pccheck = Get-ADComputer -Filter * -SearchBase "OU=Test,OU=Computers,DC=TESTENV,DC=local" | Select -ExpandProperty Name

$wshell = New-Object -ComObject Wscript.Shell
if ($pccheck -contains $env:computername) {
    $Output = $wshell.Popup("Pc is eligible") 
} else {
    $Output = $wshell.Popup("Not eligible")
}

方法2:直接检查对象的Name属性

不修改$pccheck的赋值,而是在if条件中检查对象集合的Name属性数组:

$pccheck = Get-ADComputer -Filter * -SearchBase "OU=Test,OU=Computers,DC=TESTENV,DC=local" | Select Name

$wshell = New-Object -ComObject Wscript.Shell
if ($pccheck.Name -contains $env:computername) {
    $Output = $wshell.Popup("Pc is eligible") 
} else {
    $Output = $wshell.Popup("Not eligible")
}

方法3:更高效的AD查询(推荐)

直接用AD过滤器查询当前计算机是否在目标OU中,避免获取所有计算机再匹配,性能更优:

$targetOU = "OU=Test,OU=Computers,DC=TESTENV,DC=local"
$currentPC = Get-ADComputer -Filter "Name -eq '$env:computername'" -SearchBase $targetOU -ErrorAction SilentlyContinue

$wshell = New-Object -ComObject Wscript.Shell
if ($currentPC) {
    $Output = $wshell.Popup("Pc is eligible") 
} else {
    $Output = $wshell.Popup("Not eligible")
}

额外修正点

原代码中else分支的$wshell未定义,会导致报错,所以把$wshell = New-Object -ComObject Wscript.Shell移到if语句外面,确保两个分支都能调用。

内容的提问来源于stack exchange,提问作者Coder2510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:13:18