【问题标题】:Filter result from Get-ADUser using sAMAccountname使用 sAMAccountname 从 Get-ADUser 过滤结果
【发布时间】:2019-08-24 04:04:28
【问题描述】:

我想使用 Get-ADUser 从 AD 中提取用户名。我遇到的问题是当使用 sAMAaccount 名称作为过滤器时,如果在多个条目中找到该值,我会得到多个结果。举例来说,如果我的 samaccountname 是“a123b”,而我的同事是“c1234d”,那么当我运行这个时,我会得到我们俩的名字:

get-aduser -ldapFilter "(samaccountname=*123*)"| select Name

我只想返回基于“123”而不是“1234”的信息

我已经尝试了以下方法也无济于事:

get-aduser -Filter "samaccountname -like '*123*'" | select Name

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    您可以使用正则表达式缩小范围:

    $filter = "[a-zA-Z]123[a-zA-Z]"
    Get-ADUser -Filter "samaccountname -like '*123*'" | where { $_.samaccountname -match $filter} | select name
    
    • $filter 是一个简单的正则表达式模式,用于查找被字母(大写或小写)包围的 123
    • -match 是允许正则表达式比较的运算符

    【讨论】:

      【解决方案2】:

      在过滤器或 LDAPFilter 中使用 部分 SamAccountName 时,很可能会得到多个结果。

      要测试并返回特定用户帐户,您需要尽可能使过滤器更具体(取决于您的环境对帐户名使用的策略),例如

      Get-ADUser -Filter "SamAccountName -like 'a123*'" | Select-Object Name
      

      或使用额外的Where-Object 子句通过其他用户属性(例如名字)来缩小结果范围:

      Get-ADUser -Filter "SamAccountName -like '*123*'" | Where-Object { $_.GivenName -eq 'John' } | Select-Object Name
      

      请注意,上面的示例仍然可以返回多个用户对象..

      如果你有它,检索单个用户对象的绝对可靠方法是使用该用户的DistinghuishedName 并使用-Identity 参数获取对象。见Get-ADUSer

      附注: 使用 -like 运算符或 LDAPFilter 时,请在名称的不同部分使用通配符。

      【讨论】:

      • 感谢您的建议。不幸的是,我不能使用任何其他过滤器,因为我严格使用 samccountname 来查找用户信息。
      【解决方案3】:

      由于您不能在 LDAP 查询中使用正则表达式,您可以使用这样的查询告诉它查找包含 123 但不包含第四位数字的用户帐户:

      (&(objectClass=user)(samaccountname=*123*)(!samaccountname=*1231*)(!samaccountname=*1232*)(!samaccountname=*1233*)(!samaccountname=*1234*)(!samaccountname=*1235*)(!samaccountname=*1236*)(!samaccountname=*1237*)(!samaccountname=*1238*)(!samaccountname=*1239*)(!samaccountname=*1230*))
      

      它很丑,但它有效。

      请注意,如果您有一个以通配符开头的过滤器,则无法使用该属性的索引,因此它必须查看 每个 帐户才能找到匹配项。我为objectClass 添加了一个过滤器,因为它已编入索引,它将确保它只查看用户对象。

      【讨论】:

      • 我看到了你想要达到的目标,我相信这也会奏效。但是,Itchydon 提供的解决方案更适合我们的需求。但我感谢您调查我的问题!
      • 没问题。请记住,其他解决方案会要求 AD 提供比您需要的更多帐户,将它们全部加载到内存中,然后丢弃一些结果。而此解决方案只会询问您需要什么。如果您要过滤掉很少的帐户,那就没关系了。但是如果你过滤我们的10个或100个帐户,那么速度上的差异会更大。
      • 知道了,我什至没有想到过滤掉更多帐户时可能会影响性能。目前,我拥有的脚本的范围非常有限,因此其他解决方案可以工作。但为了将来参考,我将研究您的解决方案作为可行的替代方案。再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多