Get-ADUser筛选器比较

时间:2019-09-06 13:35:17

标签: powershell active-directory

我开始使用PowerShell,并试图使此行正常工作:

(Get-ADUser -Filter {userPrincipalName -eq $($ListUsers[100].UserPrincipalName)} -SearchBase "..." -Properties *).distinguishedName

我尝试了很多不同的方法,但是没有用。

$ListUsers[100].UserPrincipalName)的调用可以100%确定,我在行外尝试过,所以这只是一个逻辑或语法问题。

有人可以告诉我如何使其工作吗?谢谢

1 个答案:

答案 0 :(得分:3)

使用双引号。

-Filter cmdlet的Get-AD*参数采用字符串(!),而不是脚本块(尽管看起来像这样,因为也可以使用大括号代替引号)。

Get-ADUser -Filter "userPrincipalName -eq '$($ListUsers[100].UserPrincipalName)'"

这样,您将获得适当的变量替换。请注意,您必须以有效的过滤器字符串结尾,因此,当这些值是字符串时,必须在这些值周围加上单引号。


如果要从AD中提取许多对象,那么一次完成全部获取而不是在循环中一对一地获取将是有益的。考虑一下:

$ListUsers = @(<# ...list of items... #>)

# build LDAP filter string
$upn_filter = $ListUsers.UserPrincipalName -join ')(userPrincipalName='
$upn_filter = "(|(userPrincipalName=$upn_filter))"

$users = Get-ADUser -LDAPFilter $upn_filter
$users.distinguishedName

这将以以下形式构建LDAP过滤器:

(|(userPrincipalName=A)(userPrincipalName=B)(userPrincipalName=C)(userPrincipalName=D))

便可以一步从AD中获取4个匹配对象。当然,您也可以构建“ PowerShell样式”过滤器字符串,但是我发现LDAP语法更易于处理,并且更短。

LDAP过滤器字符串可以很长而不会引起服务器的抱怨,并且只进行一次到域控制器的往返即可节省时间。