通过数组 employeenumber 获取 aduser
Get-aduser by array employeenumber
我正在尝试获取由固定的 EmployeeNumbers 属性列表给出的 AD 用户的 SamAccountName 或 Name 属性,为此我创建了一个数组,然后我想在屏幕上打印所有 SamAccountName 属性以复制它们到网络程序。
$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)
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$($usr).EmployeeNumber'" -properties Name}
所以对于 $EmpID 数组中的每个值,我都得到了一个错误。
Get-ADUser : No se encuentra ningún parámetro de posición que acepte el argumento 'EmployeeNumber = '60621''.
En línea: 3 Carácter: 2
+ {get-aduser where "EmployeeNumber = '$usr'" -Properties Name}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.GetADUser
您的变量 $EmpID 仅包含一个数字,没有“EmployeeNumber” 属性 而且您的右括号位置错误。您可以通过 运行 this
看到差异
$EmpID=(57885,57718,57806,57607)
foreach($usr in $EmpID){$usr.employeenumber} # No output
然后这个
$EmpID=(57885,57718,57806,57607)
foreach($usr in $EmpID){$usr}
因此,如果您只需将代码更改为
$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)
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$usr'" -properties Name}
它应该可以正常工作。您现在调用它的方式需要 $EmpID 具有 objects 和 EmployeeNumber 属性。假设您有一个只有一列的 CSV,header 是 EmployeeNumber。以下是有效的。
$EmpID = Import-CSV $somecsvfile
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$($usr.EmployeeNumber)'" -properties Name}
请注意子表达式包含变量和 属性 名称。
如评论所述,AD 用户具有属性 EmployeeID
和 EmployeeNumber
(均定义为 string)。
您的问题和代码显示您混合了这两个属性,因此您需要首先彻底检查您需要使用这两个属性中的哪一个。
然后关于您的代码的一些评论:
$EmpID
数组定义不需要括号,为了清晰起见可以分成多行
- 代码显示您使用了
Get-ADUser -Filter ..
,但您显示的错误消息并未使用。它揭示了 Where-Object
的用法和一个错误的子句,在该子句中您试图通过 =
运算符 将某些东西分配给 另一个东西。
- 该代码不会检查它是否真的可以找到具有该 EmployeeNumber 或 EmployeeID 的用户。如果这完全可行,它不会输出您打算接收的内容,这似乎只是 SamAccountName,
下面的代码假定您使用的是 EmployeeID
属性,但您需要检查这是否不应该是 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
$result = foreach($id in $EmpID) {
$user = Get-ADUser -Filter "EmployeeID -eq '$id'" -Properties EmployeeID, EmployeeNumber -ErrorAction SilentlyContinue
if ($user) {
# output the user property you want to store in the $result array
$user.SamAccountName # your question wants SamAccountName only..
}
else {
Write-Warning "User with EmployeeID '$id' does not exist"
}
}
# now you have an array with user SamAccountNames
# output on screen
$result
我正在尝试获取由固定的 EmployeeNumbers 属性列表给出的 AD 用户的 SamAccountName 或 Name 属性,为此我创建了一个数组,然后我想在屏幕上打印所有 SamAccountName 属性以复制它们到网络程序。
$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)
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$($usr).EmployeeNumber'" -properties Name}
所以对于 $EmpID 数组中的每个值,我都得到了一个错误。
Get-ADUser : No se encuentra ningún parámetro de posición que acepte el argumento 'EmployeeNumber = '60621''.
En línea: 3 Carácter: 2
+ {get-aduser where "EmployeeNumber = '$usr'" -Properties Name}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.GetADUser
您的变量 $EmpID 仅包含一个数字,没有“EmployeeNumber” 属性 而且您的右括号位置错误。您可以通过 运行 this
看到差异$EmpID=(57885,57718,57806,57607)
foreach($usr in $EmpID){$usr.employeenumber} # No output
然后这个
$EmpID=(57885,57718,57806,57607)
foreach($usr in $EmpID){$usr}
因此,如果您只需将代码更改为
$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)
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$usr'" -properties Name}
它应该可以正常工作。您现在调用它的方式需要 $EmpID 具有 objects 和 EmployeeNumber 属性。假设您有一个只有一列的 CSV,header 是 EmployeeNumber。以下是有效的。
$EmpID = Import-CSV $somecsvfile
foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$($usr.EmployeeNumber)'" -properties Name}
请注意子表达式包含变量和 属性 名称。
如评论所述,AD 用户具有属性 EmployeeID
和 EmployeeNumber
(均定义为 string)。
您的问题和代码显示您混合了这两个属性,因此您需要首先彻底检查您需要使用这两个属性中的哪一个。
然后关于您的代码的一些评论:
$EmpID
数组定义不需要括号,为了清晰起见可以分成多行- 代码显示您使用了
Get-ADUser -Filter ..
,但您显示的错误消息并未使用。它揭示了Where-Object
的用法和一个错误的子句,在该子句中您试图通过=
运算符 将某些东西分配给 另一个东西。 - 该代码不会检查它是否真的可以找到具有该 EmployeeNumber 或 EmployeeID 的用户。如果这完全可行,它不会输出您打算接收的内容,这似乎只是 SamAccountName,
下面的代码假定您使用的是 EmployeeID
属性,但您需要检查这是否不应该是 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
$result = foreach($id in $EmpID) {
$user = Get-ADUser -Filter "EmployeeID -eq '$id'" -Properties EmployeeID, EmployeeNumber -ErrorAction SilentlyContinue
if ($user) {
# output the user property you want to store in the $result array
$user.SamAccountName # your question wants SamAccountName only..
}
else {
Write-Warning "User with EmployeeID '$id' does not exist"
}
}
# now you have an array with user SamAccountNames
# output on screen
$result