通过数组 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 用户具有属性 EmployeeIDEmployeeNumber(均定义为 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