【问题标题】:Get ADUser sort by memberof not working for me通过 memberof 获取 ADUser 排序不为我工作
【发布时间】:2020-01-29 08:58:38
【问题描述】:

我需要提取特定 OU 中属于同一组的所有成员的列表。问题是它只有在我使用 -match 时才有效,但是它也会选择具有相似名称的组。如果我使用 -eq 它不会检索任何内容,尽管用户是该特定组的成员。谁能帮我弄清楚我做错了什么?

我一直在使用的powershell脚本;

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

【问题讨论】:

  • $_.memberof -eq 'APP-KMD' --> $_.memberof -like '*APP-KMD*'
  • 这一个可悲地也超过了它,它也带走了其他组。示例“APP-KMD_Test”

标签: powershell active-directory memberof


【解决方案1】:

您的问题在于比较运算符,以下是它们之间的一些区别:

数字比较:

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

字符串比较:

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

正则表达式比较

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

如果您知道组的确切名称,您可能应该使用 -like "GROUPNAME",这样您就只能获得该组的用户。

【讨论】:

  • 类似也不会返回用户。这很奇怪,因为如果我使用 -match,组中的用户会与其他类似的命名组一起进入列表。
  • 如果它几乎可以与 match 一起使用,我建议您阅读此内容:RegEx Formatting 在您的情况下,如果您将 ^ 放在 Groupname 的开头并将 $ 放在 Groupname 的末尾,您应该是安全的。
  • 刚刚测试了 ^ 和 $ 在前端和末端,一个没有另一个。它仍然拒绝提取我的匹配项。不过感谢您的快速回答。
【解决方案2】:

显然你不能直接匹配,但是如果你抓取给定组的匹配项并拉出该组的成员并比较它们,它会给出预期的输出。

$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 }
} 

【讨论】:

    【解决方案3】:

    记住memberOf属性的值是一个组的DN,所以你需要匹配整个DN,而不仅仅是组的CN。您可以在子查询中获取组的 DN 并直接在过滤器中使用它,即:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多