需要列表中的每个名称来查询活动目录
Need every name in the list to query active directory
为什么每次循环只显示最后一个对象而不显示所有对象?
$str = @"
First1 Last1
First2 Last2
First3 Last3
First4 Last4
"@
foreach ($line in $str.Split("`n")) {
$userOBJ = Get-ADUser -Filter {Name -like $line}
$userOBJ
}
输出只有一条记录。
DistinguishedName : CN=First Last,OU=BLAH and BLAH,OU=BLAH BLAH,DC=corp,DC=domain,DC=com
Enabled : True
GivenName : First
Name : First Last
ObjectClass : user
ObjectGUID : XXXXXX-XXXXXXXXX
SamAccountName : useranme
SID : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Surname : Last
UserPrincipalName : username@comain.com
试试这个:
$str = @"
First1 Last1
First2 Last2
First3 Last3
First4 Last4
"@
#Split your string and remove empty/null values.
$Names = $str.Split("`r`n") | ? { $_ }
#Make one filter request with all your names.
$Filter = "Name -like '$($Names -Join "' -or Name -like '")'"
Get-ADUser -Filter $Filter
使用多个过滤器向 AD 发出一个请求将提高速度并减少域控制器的开销。
关于如何创建过滤器的说明
当想要构建包含多个搜索结果的长过滤器时,您需要这样设置过滤器的格式:
$Filter = "Name -Like 'First1 Last1' -or Name -Like 'First2 Last2' -or Name 'First3 Last3' -or Name -Like 'First4 Last4'"
最简单的方法是使用数组中每个值之间的任何内容进行连接。在这种情况下,' -or Name -Like '
介于 $Names.
中的每个值之间
$JoinResult = $Names -Join "' -or Name -Like '"
$JoinResult -eq :
First1 Last1' -or Name -Like 'First2 Last2' -or Name 'First3 Last3' -or Name -Like 'First4 Last4
下一步是关闭它..(该过滤器字符串的开始和结束)您希望过滤器以 Name -Like '
开始并以尾随 '
$Filter = "Name -Like '$JoinResult'"
一行完成所有这些是:
$Filter = "Name -like '$($Names -Join "' -or Name -like '")'"
foreach ($line in $str -Split('\r\n')) {
Get-ADUser -Filter {Name -eq $line}
}
添加 -Split 和 \r 解决了我的问题。感谢@gbabu 和@Bacon Bits 引领我走向正确的方向。
为什么每次循环只显示最后一个对象而不显示所有对象?
$str = @"
First1 Last1
First2 Last2
First3 Last3
First4 Last4
"@
foreach ($line in $str.Split("`n")) {
$userOBJ = Get-ADUser -Filter {Name -like $line}
$userOBJ
}
输出只有一条记录。
DistinguishedName : CN=First Last,OU=BLAH and BLAH,OU=BLAH BLAH,DC=corp,DC=domain,DC=com
Enabled : True
GivenName : First
Name : First Last
ObjectClass : user
ObjectGUID : XXXXXX-XXXXXXXXX
SamAccountName : useranme
SID : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Surname : Last
UserPrincipalName : username@comain.com
试试这个:
$str = @"
First1 Last1
First2 Last2
First3 Last3
First4 Last4
"@
#Split your string and remove empty/null values.
$Names = $str.Split("`r`n") | ? { $_ }
#Make one filter request with all your names.
$Filter = "Name -like '$($Names -Join "' -or Name -like '")'"
Get-ADUser -Filter $Filter
使用多个过滤器向 AD 发出一个请求将提高速度并减少域控制器的开销。
关于如何创建过滤器的说明
当想要构建包含多个搜索结果的长过滤器时,您需要这样设置过滤器的格式:
$Filter = "Name -Like 'First1 Last1' -or Name -Like 'First2 Last2' -or Name 'First3 Last3' -or Name -Like 'First4 Last4'"
最简单的方法是使用数组中每个值之间的任何内容进行连接。在这种情况下,' -or Name -Like '
介于 $Names.
$JoinResult = $Names -Join "' -or Name -Like '"
$JoinResult -eq :
First1 Last1' -or Name -Like 'First2 Last2' -or Name 'First3 Last3' -or Name -Like 'First4 Last4
下一步是关闭它..(该过滤器字符串的开始和结束)您希望过滤器以 Name -Like '
开始并以尾随 '
$Filter = "Name -Like '$JoinResult'"
一行完成所有这些是:
$Filter = "Name -like '$($Names -Join "' -or Name -like '")'"
foreach ($line in $str -Split('\r\n')) {
Get-ADUser -Filter {Name -eq $line}
}
添加 -Split 和 \r 解决了我的问题。感谢@gbabu 和@Bacon Bits 引领我走向正确的方向。