powershell 获取ADUser按memberof排序对我无效

6ie5vjzr  于 2022-12-23  发布在  Shell
关注(0)|答案(4)|浏览(162)

我需要提取一个特定OU中属于同一组的所有成员的列表。问题是只有使用-match时才有效,但是它也会选择名称相似的组。如果使用-eq,它什么也不会检索到,尽管用户是该特定组的成员。有人能帮助我找出我做错了什么吗?
我一直在使用的powershell脚本;

Get-ADUser -Filter * -SearchBase 'OU=NewUsers,DC=LOCAL' -properties memberof | Where-Object {$_.memberof -eq 'APP-KMD'} | Select SamAccountName
dldeef67

dldeef671#

您的问题与比较运算符有关,以下是它们之间的一些差异:
编号比较:

  • eq(等于)
  • ne(不等于)
  • gt(大于)
  • lt(小于)
  • le(小于或等于)
  • ge(大于或等于)

字符串比较:

  • -like和-notLike(通配符字符串比较,通配符为 * 和?),不要与-contains运算符混淆。

正则表达式比较

  • -match和-notMatch(与正则表达式匹配)

如果您知道组的确切名称,您可能应该使用-如“GROUPNAME”,这样您只会得到该组的用户。

h9a6wy2h

h9a6wy2h2#

显然,您不能直接匹配,但是如果您获取给定组中的匹配项,然后抽出该组中的成员并进行比较,就会得到预期的输出。

$brugere = Get-ADUser -Filter * -SearchBase 'OU=NewUsers,DC=LOCAL' -Properties * | Select-Object SamAccountName
$gruppemedlem = Get-ADGroupMember -Identity app-kmd | select SamAccountName

ForEach ($bruger in $brugere)
{   

If ($gruppemedlem.samaccountname -contains $bruger.SamAccountName) {
    Write-Host $bruger }
}
wfveoks0

wfveoks03#

记住memberOf属性的值是一个集团的DN,所以需要匹配整个DN,而不是只匹配集团的CN,可以在子查询中得到集团的DN,直接在过滤器中使用,即:

Get-ADUser -LDAPFilter "(memberof=$(Get-ADGroup APP-KMD))" -SearchBase 'OU=NewUsers,DC=LOCAL' | Select SamAccountName
06odsfpq

06odsfpq4#

老职位,我知道,但只是想把我的帽子扔到别人的戒指。
也许我漏掉了一些东西,但是将Get-ADGroupMember -Identity "APP-KMD"通过管道传输到Get-ADUser不是更简单吗?

$ADUserParameters = 
@{
   "SearchBase" = "OU=NewUsers,DC=LOCAL"
   "Properties" = "SamAccountName"
   "Filter" = "*"
}
Get-ADGroupMember -Identity "APP-KMD" | Get-ADUser @ADUserParameters

不完全确定这是性能最好的代码,但它至少限制了您通过管道发送的内容仅限于该组的成员,而不是首先通过整个SearchBase发送Get-ADUser的所有成员。
编辑:忽略,它的waaay更高的性能使用-LDAP过滤器,因为其他人指出-以下为我工作。

Get-ADUser -LDAPFilter "(memberof=$(get-adgroup 'YOUR-SEC-GROUP'))"

或更好的可维护性

$secGroup = Get-ADGroup "YOUR-SEC-GROUP"
Get-ADUser -LDAPFilter "(memberof=$secGroup)"

相关问题