【问题标题】:Get-aduser by array employeenumber通过数组employeenumber获取aduser
【发布时间】:2020-08-09 03:18:29
【问题描述】:

我正在尝试获取由 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

【问题讨论】:

  • $usr 只是数字。所以将过滤器更改为employeenumber -eq $usr
  • 您需要检查您尝试比较的属性。 ADUser 同时拥有EmployeeNumberEmployeeID。这两个属性都是字符串。我的猜测是您混合了这两个属性,因为您有变量$EmpID,但尝试通过属性EmployeeNumber 找到用户。此外,默认情况下会返回 prperty Name,而您必须明确请求 EmployeeNumber 和/或 EmployeeID

标签: powershell active-directory powershell-5.0


【解决方案1】:

您的变量 $EmpID 仅包含一个数字,没有“EmployeeNumber”属性,而且您的右括号位于错误的位置。你可以通过运行这个来看到区别

$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 具有具有 EmployeeNumber 属性的对象。假设您有一个包含单列的 CSV,并且标题是 EmployeeNumber。以下是有效的。

$EmpID = Import-CSV $somecsvfile

foreach($usr in $EmpID){get-aduser -filter "EmployeeNumber -eq '$($usr.EmployeeNumber)'" -properties Name}

注意子表达式包含变量和属性名称。

【讨论】:

  • 很好,它工作,在PowerShell ISE上运行它时发生了奇怪的事情,使用powershell 5.1.17134.112 运行脚本2次,没有得到任何结果,什么都没有,甚至没有错误。第三次它工作得很好,得到了所有结果。
  • 为什么说“没有“EmployeeNumber”属性”?一个 ADUser 有 both EmployeeID and EmployeeNumber attributes
  • 他指的是我的变量$EmpID,它只是一个数字,没有employeenumber属性。
【解决方案2】:

如评论所述,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

【讨论】:

  • 感谢您的帮助,在这种情况下,我知道所有 ID 都是阳性结果,这就是为什么我不认为它们不存在的原因。
猜你喜欢
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多