代码之家  ›  专栏  ›  技术社区  ›  Rakha

基于不同输入在AD(Get ADUser)中查找用户的最佳方式

  •  1
  • Rakha  · 技术社区  · 6 年前

    我在寻找你对最佳方式的想法。

    目标只是基于不同的可能输入找到给定的用户。

    可能性是:

    $input = "John,Smith"
    $input = "John Smith"
    $input = "John Smith(ext)"
    $input = "Smith,John"
    $input = "Smith John"
    $input = "Smith John(ext)"
    

    我的工作解决方案是:

    if ($input -like "*(*" ) {
    $input = $input -replace '\([^\)]+\)'
    }
    
    if ($input -like "*,*"){
    $FullName = $input -split "," 
    } 
    elseif ($input -like "* *"){
    $FullName = $input -split " "
    } 
    
    
    get-ADUser -Filter " ( ( (GivenName -like '$($FullName[0])*') -and (SurName -like '$($FullName[1])*') ) -or ( (SurName -like '$($FullName[0])*') -and (GivenName -like '$($FullName[1])*') ) ) "
    

    所以基本上是这样的:

    -如果输入包含括号,请删除括号以及括号之间的内容。
    -如果输入包含逗号,请拆分该字符串。

    -获取AdUser,过滤(GivenName和姓氏)或(姓氏和GivenName)
    因为我不知道他们的顺序。

    它工作的很好,但我总是好奇找到最佳的方式。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Janne Tuukkanen    6 年前

    -LDAPFilter 和不明确的名称解析( anr ):

    Get-ADUser -LDAPFilter "(anr=John Doe)"
    Get-ADUser -LDAPFilter "(anr=Doe John)"
    

    只需将逗号替换为空格,然后删除 "(ext)" . 变量名 $input 是保留的,因此不应使用:

    $name = $name -replace ",", " "
    $name = $name -replace "\(ext\)", ""
    

    或者用铁链锁住 -replace 接线员:

    $name = $name -replace ",", " " -replace "\(ext\)", ""
    

    搜索将是:

    Get-ADUser -LDAPFilter "(anr=$name)"