如何获取AD中的employeeID attritubute计数,其中employeeID = X

时间:2019-07-16 18:12:21

标签: powershell active-directory attributes

我正在编写一个Powershell脚本,该脚本会从每晚创建的自动生成的列表中自动将新员工添加到计划任务中。要求之一自然是不要创建重复的员工。因此,我的想法是计算一个员工ID的出现次数,如果> =“ 1”,则不创建该帐户并转到下一个帐户。当试图找到计数时,我正在使用以下代码。但是,我一直得到0作为回报。有人可以为我更正我的查询吗?提前致谢。

$ID = 12345
$COUNT = (Get-ADUser -filter * |where '$_.EmployeeID -eq $ID').count
Write-Output $COUNT

1 个答案:

答案 0 :(得分:2)

这里有两件事出了问题。首先,当您使用-Filter *时,它将获得所有帐户(最多1000个帐户,除非您使用ResultPageSize参数),然后将它们全部加载到内存中并将大列表传递给where。这将花费更长的时间和更多的内存,而不是所需的内存,并且,如果您的域中有1000个以上的帐户,您将无法获得准确的结果。

第二,Get-ADUser仅返回一组特定的属性,除非另有说明。由于您没有告诉您要employeeID,因此它没有返回。因此$_.EmployeeID将始终为空。

通过将EmployeeID过滤器直接传递到Get-ADUser,可以同时解决这两个问题:

$ID = 12345
$COUNT = (Get-ADUser -filter 'EmployeeID -eq $ID').count
Write-Output $COUNT