【问题标题】:Match special account names (dev-, ad-, sa-, etc.) with user samAccountName in Powershell将特殊帐户名称(dev-、ad-、sa- 等)与 Powershell 中的用户 samAccountName 匹配
【发布时间】:2016-03-18 19:32:25
【问题描述】:

我是 powershell 新手,需要搜索特殊帐户,例如开发人员 (dev-) 或管理员 (ad-),去掉前缀并查看该用户是否有帐户 (sAMAccountName)

下面,我可以搜索并从我的域中获取所有特殊帐户,但我需要编写整个过程的脚本,因此我只能取回没有常规用户帐户的特殊帐户。

ForEach ($acct in "Dev-*","dev-*","rl-*","cafe-*","dev-dev-*","ad-*", `
    "sa-*","AD-*","ir-*","tst-*","o365-*","te-*","la-*","vmtest-*", `
    "mtep-*","EIM-*","GRT*","cbl-","DS-*","fim-*") { 
        Get-ADUser -Filter {sAMAccountName -like $acct} -SearchBase "DC=xxx,DC=xxx,DC=com" `
        -Properties sAMAccountName | Select sAMAccountName 
}

【问题讨论】:

  • 我明白了,您可能有一个帐户“dev-jbloggs”,但如果没有帐户“jbloggs”,您只想退回它?
  • 只是一个注释,但 sAMAccountName 不是区分大小写的字段。 "Dev-*""dev-*" 应该返回相同的结果。

标签: powershell


【解决方案1】:

它并不漂亮,但您可以删除您找到的用户名的前缀并搜索该用户。如果没有返回(不匹配),请继续使用开发帐户,否则将其删除。例如:

ForEach ($acct in "Dev-*","dev-*","rl-*","cafe-*","dev-dev-*","ad-*", "sa-*","AD-*","ir-*","tst-*","o365-*","te-*","la-*","vmtest-*", "mtep-*","EIM-*","GRT*","cbl-*","DS-*","fim-*") { 
    Get-ADUser -Filter {sAMAccountName -like $acct} -SearchBase "DC=xxx,DC=xxx,DC=com" |
    Where-Object {
        $prefix = $acct.Replace("*","")
        $user = $_.sAMAccountName.Replace($prefix,"")
        if(-not(Get-ADUser -Filter {sAMAccountName -eq $user} -SearchBase "DC=xxx,DC=xxx,DC=com")) { 
            #Throw user further down the pipeline
            $_
        }
    } |
    Select sAMAccountName 
}

【讨论】:

  • 这就是我要建议的全部内容。 AFAIK 实际上没有其他方法可以做到这一点,但是为了提高性能,您应该只运行一次 Get-ADUser 并将其保存到变量中,而不是为每个 $acct 向下拖动每个用户。
  • 我会将前缀保存到数组中,使用-or ... -or... 等生成过滤器脚本块,但这是另一个问题(优化):-)
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多