如何用PowerShell从AD中筛选SAMAccountName与EmployeeID一致的用户?
筛选AD中SAMAccountName与EmployeeID属性值相同的用户
之前命令的问题
- 第一条命令
Get-ADUser -Filter * | Select GivenName, SAMAccountName没有添加筛选逻辑,且未加载EmployeeID属性(AD默认不返回该属性),因此会返回所有用户。 - 第二条命令的Filter逻辑错误,它是用外部变量
$employee.employeeID匹配用户的employeeID,而非判断同一个用户的SamAccountName和EmployeeID是否相等。
正确的解决方法
方法1:本地筛选(适合用户量较小的场景)
先获取所有带EmployeeID属性的用户,再筛选两个属性值相等的条目:
Get-ADUser -Filter * -Properties EmployeeID | Where-Object { $_.SamAccountName -eq $_.EmployeeID } | Select-Object GivenName, SamAccountName, EmployeeID | Export-Csv -Path C:\Support\GDPid.csv -NoTypeInformation
各部分作用:
Get-ADUser -Filter * -Properties EmployeeID:获取所有AD用户,同时加载默认不返回的EmployeeID属性Where-Object { $_.SamAccountName -eq $_.EmployeeID }:筛选出两个属性值完全相等的用户Select-Object ...:指定需要导出的属性(可按需增减)Export-Csv:将结果导出到指定CSV文件
方法2:LDAP服务器端筛选(性能更优,适合大用户量场景)
直接通过LDAP Filter让AD服务器完成筛选,减少本地数据传输:
Get-ADUser -LDAPFilter "(samaccountname=employeeID)" -Properties EmployeeID | Select-Object GivenName, SamAccountName, EmployeeID | Export-Csv -Path C:\Support\GDPid.csv -NoTypeInformation
LDAP Filter(samaccountname=employeeID)的作用是匹配samaccountname属性值与employeeID属性值完全相同的用户条目,筛选逻辑在AD服务器端执行,效率更高。
内容的提问来源于stack exchange,提问作者tamzie10
相关产品推荐
相关产品推荐

