搜索不同的服务器时,Active Directory搜索筛选器失败

时间:2017-07-10 14:52:29

标签: powershell active-directory powershell-v5.0

早上好,

我正在开发一个图形应用程序,它在活动目录中搜索有关用户的信息并返回某些字段。我的公司有两个服务器用于活动目录,我们将其称为服务器A和服务器B.当我尝试按姓氏搜索用户时,它适用于服务器A(这是默认服务器),但是我得到一个错误尝试搜索服务器B时,过滤器无效。我已经尝试将搜索字符串存储在变量中并完全写出来,但我没有在谷歌或堆栈交换中找到任何其他问题处理类似的问题。请注意,我可以按服务器B上的用户ID进行搜索;搜索功能仅在尝试按姓氏搜索时失败。我的搜索功能如下:

function Search{
    $uidr = [regex]'[a-zA-Z]{3}\d{3}'
    $script:op = ''
    $script:list = $null
    [array]$y = $null
    #$uidr is a regex string to match user ids
    if($script:x -match $uidr){
        try{
            $y = Get-ADUser $script:x -Properties cC
            #using select instead of $y.property for compatibility
            $ad = ($y | select -ExpandProperty samAccountName) + ' | ' + ($y | select -ExpandProperty Name) + ' | ' + ($y | select -ExpandProperty cC)
            $script:op = $ad
        }
        catch{
            try{
                $y = Get-ADUser $script:x -Server B.Server.com -Properties Title
                $ad = ($y | select -ExpandProperty samAccountName) + ' | ' + ($y | select -ExpandProperty Name) + ' | ' + ($y | select -ExpandProperty Title)
                $script:op = $ad
            }
            catch{
                $script:op = 'User ID Not Found'
            }
        }
    }
    else{
        $script:list = $null
        try{
            $y = Get-ADUser -Filter "surname -eq '$script:x'" -Properties cC
        }
        catch{
            try{
                $y = Get-ADUser -Server B.Server.com -Filter "surname -eq '$script:x'" -Properties Title
            }
            catch{
                $script:op = 'No user with that last name found. Check spelling and try again.'
            }
        }
        #This if/else is always defaulting to last when last name stored on server B but not server A is entered. $y.count must be 0
        if($y.Count -gt 1){
            foreach($u in $y){
                [array]$script:list += $u.name
            }
            foreach($l in ($script:list | select -Unique)){
                $listbox += $l
            }
        }
        elseif($y.Count -eq 1){
            $m = $y | select -ExpandProperty cC
            if($m -ne $null){
                $ad = ($y | select -ExpandProperty samAccountName) + ' | ' + ($y | select -ExpandProperty Name) + ' | ' + ($y | select -ExpandProperty cC)
                $script:op = $ad.tostring()
            }
            else{
                $ad = ($y | select -ExpandProperty samAccountName) + ' | ' + ($y | select -ExpandProperty Name) + ' | ' + ($y | select -ExpandProperty Title)
                $script:op = $ad.tostring()
            }
        }
        elseif($y.count -eq 0){
            $script:op = 'No user with that last name found. Check spelling and try again.'
        }
    }
    if($script:op -eq ''){
        continue
    }
    else{
        write-host $script:op
    }
}

目前,除了搜索服务器B的姓氏之外,其中的每个方面都有效。函数本身只返回'没有找到该姓氏的用户',但在尝试搜索时,我能够将其隔离到过滤器姓氏。

请注意,我还尝试将搜索功能作为一个独立的脚本运行,我知道在服务器B上直接写入过滤器的姓氏,并且仍然找回“没有找到此姓氏的用户”

我不知道过滤器有什么问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以,问题在于我使用的是Try / Catch。我通过用If语句替换Try / Catch来解决这个问题:

else{
    $script:list = $null
    $y = Get-ADUser -Filter "surname -eq '$script:x'" -Properties cC
    if($y -eq $null){
        $y = Get-ADUser -Server B.Server.com -Filter "surname -eq '$script:x'" -Properties Title
    }
    if($y -eq $null){
        $script:op = 'No user with that last name found. Check spelling and try again.'
    }
}