【问题标题】:Get-ADUser filter by property length按属性长度获取 ADUser 过滤器
【发布时间】:2012-02-03 19:24:10
【问题描述】:

我似乎无法解决这个问题来挽救我的生命。

我想抓取所有SAMAccountName长度等于6的AD用户。

我希望有这样的东西

Get-ADuser -filter "samaccountname.length -eq 6" | out-file $outputFile -append

我正在编写一个庞大的脚本来首先转储所有 AD 用户,然后遍历每个转储用户并更新一些属性。这个脚本会经常运行,所以我想让它尽可能高效。我认为可以改进的一个领域是转储过程。

我们在 AD 中有大约 15000 个用户,但我只对 4000 个用户感兴趣,特别是那些他们的 SamAccountName 是 6 个字符的用户。出于这个原因,我不想用大约 11,000 个不必要的 ID 填充我的 ID 输出文件。

如果可能,我想尽量避免内联 for-each。

任何帮助将不胜感激。

【问题讨论】:

    标签: powershell active-directory powershell-2.0


    【解决方案1】:

    试试这个:

    Get-ADuser - filter * | ? { $_.samaccountname.length -eq 6} | out-file -$outputfile -append
    

    我通常用 Get-QADuser(来自 Quest 模块)来做,但我认为 Get-ADUser 是一样的。

    如果 $_.samaccountname 不是字符串,您可能必须使用:

    $_.samaccountname.tostring().length
    

    编辑:

    Get-ADUser -Filter * -Properties samaccountname | ? {$_.samaccountname.length -eq 6}
    

    【讨论】:

    • 这似乎不起作用,每次我运行它都会提示我输入过滤器。另外,如何获取 samaccountname 的长度?它不会只是检查 samaccountname 是否为“6”吗?
    • 希望这仍然获取所有 AD 用户对象然后过滤它们?
    • @Arcass 所有用户都必须经过测试才能以这种方式或任何其他方式匹配过滤器。没有办法(据我所知)避免隐式或显式的 foreach 循环。
    • 这行得通。如果在获取所有 AD 对象之前没有办法过滤,只有在之后,那么我将不得不这样做。在我的环境中运行它只需要一分钟,所以我想这会做。感谢您的帮助!
    【解决方案2】:
    Get-ADuser | where { $_.samaccountname.length -eq 6 } | out-file $outputFile -append
    

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 2021-07-23
      • 2021-12-02
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多