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

PowerShell查询AD:如何模糊匹配计算机描述中的用户名?

解决Active Directory中筛选包含用户名的计算机描述问题

问题背景

需要筛选AD组及子组中的所有用户名,再找出描述字段包含这些用户名的计算机。当前计算机描述里包含空格、"NEW"等额外字符,现有代码只能完全匹配,无法实现包含匹配:

foreach ($file in Get-ADGroupMember -Identity GroupName -Recursive) {Get-ADComputer -Filter 'Description -like $file.name' -Property Name,Description | Select -Property Name,Description}

尝试添加通配符或改用-Include均未成功,需要修改代码实现包含匹配。

解决方案

问题核心在于两个点:

  • 单引号包裹的筛选字符串中,变量$file.name不会被解析为实际用户名,而是作为字面量处理
  • 缺少通配符*来实现“包含”逻辑

修改后的代码如下:

foreach ($user in Get-ADGroupMember -Identity GroupName -Recursive) {
    # 构建包含通配符的筛选条件,双引号确保变量正常展开
    $filterCondition = "Description -like '*$($user.name)*'"
    Get-ADComputer -Filter $filterCondition -Property Name,Description | Select-Object Name,Description
}

关键修改说明

  • 将循环变量名改为$user,更符合语义(原变量名$file容易造成误解)
  • 使用双引号包裹筛选条件,让$user.name被正确解析为当前遍历的用户名
  • 在用户名前后添加*通配符,匹配所有包含该用户名的描述内容
  • 用$($user.name)子表达式语法,确保对象属性在双引号字符串中被正确解析(避免PowerShell误解析为$user变量加.name字符串)

额外提示

如果用户名中包含AD筛选的特殊字符(如*、?),可以用[ADSISearcher]::EscapeFilter($user.name)对用户名进行转义,避免筛选逻辑出错,示例:

foreach ($user in Get-ADGroupMember -Identity GroupName -Recursive) {
    $escapedUserName = [ADSISearcher]::EscapeFilter($user.name)
    $filterCondition = "Description -like '*$escapedUserName*'"
    Get-ADComputer -Filter $filterCondition -Property Name,Description | Select-Object Name,Description
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:50:44