使用PowerShell搜索AD计算机description属性 查询用户最后登录设备
问题修复方案
现有代码的核心问题
- 最早的错误代码中,循环内误用了全局数组变量
$hanne,而不是当前循环的单条账号变量$item,导致匹配条件完全错误 - 后续编写的代码中,通过
select samaccountname获取到的是包含samaccountname属性的PS自定义对象,不是纯账号字符串,直接拼接进Filter会导致匹配失败 - AD Filter的模糊匹配必须显式添加通配符
*,否则只会做完全相等匹配,无法命中中间包含账号的description属性值 - 字符串变量直接嵌入双引号格式的AD Filter时可能存在解析异常,推荐使用脚本块格式的Filter语法规避问题
调整后可直接运行的完整代码
# 填入要查询的用户显示名列表 $navne = "显示名1","显示名2","显示名3" # 批量查询对应samaccountname,直接展开为纯字符串数组 $usernames = foreach ($user in $navne) { $adUser = Get-ADUser -Filter "displayname -eq '$user'" -ErrorAction SilentlyContinue if ($adUser) { $adUser.samaccountname } else { Write-Warning "未找到显示名为 $user 的用户账号" } } # 批量查询对应用户最后登录的计算机 foreach ($account in $usernames) { # 拼接带通配符的匹配字符串 $matchStr = "*$account*" # 查询符合条件的计算机,可按需选择返回的属性 Get-ADComputer -Filter {description -like $matchStr} -Properties description | Select-Object Name, description }
可选优化说明
- 如果需要输出更友好的结果,可以把用户显示名、账号、计算机名、登录时间整理为自定义对象输出,方便导出为CSV
- 如果要提取description里的时间字段,可以用
Split(',')方法拆分属性值获取对应字段 - 如果你需要限制只查启用状态的计算机,可以在Filter里追加
Enabled -eq $true的条件
内容的提问来源于stack exchange,提问作者Christopher Jensen
相关产品推荐
相关产品推荐

