PowerShell使用Select-String匹配文件中已锁定AD账号对应ID问题
PowerShell 匹配AD锁定用户与本地文件ID的实现方案
需求
从file.txt中匹配查询被锁定的AD用户,关联用户账号与文件内存储的ID字段(AD账号未存储该ID字段)。
待匹配文件 file.txt 内容
Login: ID: User_SameAccountName 1111111112 User_SameAccountName2 1234252566 User_SameAccountName3 13124251255
初始问题代码
$myarray = Search-ADAccount -LockedOut | select SamAccountName $i = 1 while($i -le 5){ Select-String -Pattern "$myarray[$i]" -Path E:\file.txt $i += 1 }
问题表现
脚本运行无报错,但无任何匹配结果。将获取账号命令替换为Get-LocalUser | select name匹配本地用户名时,运行正常。
问题根因
select SamAccountName返回的是带SamAccountName属性的自定义对象数组,不是纯字符串数组,直接用于Select-String的Pattern参数时无法正常匹配- 硬编码循环下标从1开始,不符合PowerShell数组默认从0开始的规则,且固定循环到5的逻辑不灵活,容易出现下标溢出
最终解决代码
# 提取纯字符串格式的被锁定AD账号列表 $myarray = Search-ADAccount -LockedOut | select -ExpandProperty SamAccountName # 遍历账号匹配文件内容,提取匹配成功的完整行 $result = foreach ($account in $myarray){ Select-String -Path "你的file.txt实际路径" -Pattern $account | select -ExpandProperty Line } # 导出结果到指定路径 $result | Out-File '你的结果输出路径'
内容的提问来源于stack exchange,提问作者aquku
相关产品推荐
相关产品推荐

