通过PowerShell脚本排除特定服务器的技术问题
PowerShell排除AD中特定计算机对象的脚本修正
你的脚本未达到预期效果,核心问题是Get-ADComputer的Filter语法错误:Enabled -eq $True后面缺少逻辑运算符-and,导致整个筛选条件无法被正确解析。另外,使用脚本块形式的Filter偶尔会出现解析异常,推荐改用字符串格式的筛选条件,同时可以简化计算机名称的收集逻辑。
修正后的完整脚本
$ADComputers = @() $ADGroups = @() $ComputersNotInAD = @() $GroupsNotInAD = @() # 指定要查询的OU $OU = 'OU=Tier1,DC=contoso,DC=local','OU=Servers,DC=contoso,DC=local' # 修正Filter语法,改用字符串格式筛选,同时直接提取名称 $ADComputers = $OU | ForEach-Object { Get-ADComputer -Filter "Enabled -eq `$True -and Name -notlike 'server11*' -and Name -notlike 'tstsrv11*'" ` -SearchBase $PSItem | Select-Object -ExpandProperty Name }
关键改进点
- 修复Filter语法:在
Enabled -eq $True后添加-and,确保三个筛选条件(启用状态、排除server11开头、排除tstsrv11开头)逻辑连贯。 - 改用字符串Filter:避免脚本块Filter的潜在解析问题,注意字符串中
$True需要用反引号转义(`$True),防止PowerShell提前解析变量。 - 简化名称收集:直接用
Select-Object -ExpandProperty Name一次性提取名称字符串,替代原有的循环赋值,提升效率。
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

