使用PowerShell如何使用Get-ADUser搜索和过滤导出的Active Directory用户数组?

时间:2017-09-25 22:51:39

标签: powershell active-directory

我有一个PowerShell脚本,可以将CSV文件的内容与Active Directory进行比较。 CSV文件包含已在AD中的人员的人口统计信息列表。其中一列是" emplid"。此字段中的值对应于" employeeID"的值。 AD中用户对象的属性。所以,我目前使用这个" emplid"属性交叉引用AD并找到相应的用户帐户。为此,我使用类似于这样的行:

$UserAccounts = $ListOfEmloyeeIDs | ForEach-Object {Get-ADUser -Properties * -Filter {employeeID -Eq $_}}

然后我使用它将这些用户帐户添加到安全组:

$UserAccounts.SamAccountName | ForEach-Object {Add-ADGroupMember -Identity SpecialSecurityGroup -Members $_}

问题在于第一行。有数千个用户帐户,脚本可能需要数小时才能运行。这也引起了AD管理员的抱怨。我想做的是使用以下命令将所有活动的AD用户加载到变量(运行时间不到2分钟):

$ADPeopleActive = Get-ADUser -SearchBase "OU=People,DC=MyAD,DC=com" -Properties EmployeeID -Filter {Enabled -Eq $True}

然后我想对这个数组进行交叉引用,并构建一个SamAccountNames列表,以便输入类似我的第二行来填充我的安全组。

我的问题是我无法找到一种方法来对付我使用Get-ADuser与AD交叉引用的数组进行交叉引用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这样的东西
$UserAccounts = $ADPeopleActive| Where-Object { $ListOfEmloyeeIDs -contains $_.EmployeeID }