PowerShell查询含特定字符串描述的AD计算机命令报错求助
问题分析与解决方案
你的命令存在三个核心问题:
Where-Object语法错误:必须用脚本块{}包裹筛选条件,直接写Where $_.Description不符合PowerShell语法规范,导致参数识别失败。- 错误使用
-Contains运算符:-Contains用于检查集合是否包含完整元素,而非字符串的部分匹配。要查找描述中包含特定文本的计算机,应使用-Like(支持通配符)或-Match(支持正则匹配)。 - 低效的管道顺序:先执行
Select-Object Description会提前丢弃其他计算机属性,且先筛选再选择属性的效率更高——避免对所有对象执行不必要的属性选择操作。
正确的单行命令
基础版(仅获取计算机名与描述)
Get-ADComputer -Properties Description | Where-Object { $_.Description -Like "*Name*" } | Select-Object Name, Description
-Properties Description:仅加载需要的Description属性,比-Properties *更高效(避免加载所有AD计算机属性)Where-Object { $_.Description -Like "*Name*" }:用通配符*匹配包含"Name"的描述文本Select-Object Name, Description:按需选择要输出的属性
进阶版(保留所有默认AD属性)
如果需要查看AD计算机的默认属性(如DNSHostName、SamAccountName等),去掉最后的Select-Object即可:
Get-ADComputer -Properties Description | Where-Object { $_.Description -Like "*Name*" }
正则匹配版(复杂匹配场景)
若需要更灵活的匹配规则(如区分大小写、匹配特定格式),可使用-Match结合正则表达式:
Get-ADComputer -Properties Description | Where-Object { $_.Description -Match "(?i)Name" }
(?i)表示忽略大小写,可根据需求调整正则规则。
补充说明
如果确实需要先查看所有描述再筛选,可调整管道顺序(但不推荐,效率较低):
Get-ADComputer -Properties Description | Select-Object Name, Description | Where-Object { $_.Description -Like "*Name*" }
另外,若Description字段为空,-Like会自动跳过这些对象,无需额外判断空值。
内容的提问来源于stack exchange,提问作者Stanisław Bateńczuk
相关产品推荐
相关产品推荐

