通过EmployeeNumber数组获取AD用户属性时出现参数错误求助
解决Get-ADUser查询EmployeeNumber时的参数错误问题
你在批量查询AD用户时踩了几个语法小坑,我帮你梳理清楚问题和修正方案:
错误原因分析
你遇到的PositionalParameterNotFound错误主要来自两个问题:
- Filter语法写错了:原代码里的
"EmployeeNumber -eq '$($usr).EmployeeNumber'"完全不对——$usr已经是你要匹配的EmployeeNumber值,不需要额外拼接.EmployeeNumber;而且你后来误把-Filter写成了where,这是AD模块不识别的位置参数,直接导致命令解析失败。 - 输出不符合需求:你的目标是输出SamAccountName方便复制,但原代码只指定了获取Name属性,没有明确输出目标属性。
修正后的基础循环版本
先给你改好最直接的循环写法,保证每个EmployeeNumber都能正确查询并输出纯文本格式的SamAccountName:
# 定义EmployeeNumber数组 $EmpID = (57885,57718,57806,57607,59281,57790,60097,61103,60552,57862,60698,61321,57730,57402,58546,57871,57886,57669,55878,52052,57811,60106,60741,61050,59279,61053,60735,50718,51459,57805,52343,57716,60618,57908,58356,60619,50937,61204,61099,60517,61015,61123,56078,54103,57947,57861,57991,60547,57915,58559,57010,59285,61003,61016,51620,56383,60621) # 循环查询每个EmployeeNumber,输出纯文本SamAccountName foreach ($usr in $EmpID) { Get-ADUser -Filter "EmployeeNumber -eq '$usr'" -Properties SamAccountName | Select-Object -ExpandProperty SamAccountName }
更高效的批量查询版本(推荐)
循环每次单独调用Get-ADUser会多次请求AD,效率较低。可以用AD Filter的-in操作符一次性查询所有EmployeeNumber,性能更好:
$EmpID = (57885,57718,57806,57607,59281,57790,60097,61103,60552,57862,60698,61321,57730,57402,58546,57871,57886,57669,55878,52052,57811,60106,60741,61050,59279,61053,60735,50718,51459,57805,52343,57716,60618,57908,58356,60619,50937,61204,61099,60517,61015,61123,56078,54103,57947,57861,57991,60547,57915,58559,57010,59285,61003,61016,51620,56383,60621) # 一次性批量查询,直接输出所有匹配的SamAccountName Get-ADUser -Filter "EmployeeNumber -in $EmpID" -Properties SamAccountName | Select-Object -ExpandProperty SamAccountName
关键说明
- 使用
-ExpandProperty可以直接输出纯文本格式的SamAccountName,你可以直接复制这些内容到网页程序;如果不加的话,会输出带属性名的对象,复制起来很麻烦。 - 如果你同时需要Name属性,可以把
Select-Object改成Select-Object SamAccountName, Name,不过根据你的需求,只输出SamAccountName就足够了。
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

