gpt4 book ai didi

powershell - Get-ADUser 过滤器比较

转载 作者:行者123 更新时间:2023-12-03 00:59:51 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why doesn't $PSItem behave as expected when using a bracket-based -Filter argument?

(2 个回答)


2年前关闭。




我从 PowerShell 开始,并试图使这条线工作:

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

我尝试了很多不同的东西,但没有任何效果。
$ListUsers[100].UserPrincipalName) 的调用 100% 可以肯定,我在行外尝试过,所以这只是一个逻辑或语法问题。

有人能告诉我如何让它工作吗?谢谢

最佳答案

使用双引号。
-Filter Get-AD* 的参数cmdlet 需要一个字符串 (!),而不是一个脚本 block (即使它看起来很像,因为也可以使用大括号代替引号)。

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 过滤器字符串可以变得很长而服务器不会提示,并且只执行一次到域 Controller 的往返可以节省时间。

关于powershell - Get-ADUser 过滤器比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com