早上好,
我正在开发一个图形应用程序,它在活动目录中搜索有关用户的信息并返回某些字段。我的公司有两个服务器用于活动目录,我们将其称为服务器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上直接写入过滤器的姓氏,并且仍然找回“没有找到此姓氏的用户”
我不知道过滤器有什么问题。任何帮助将不胜感激。
答案 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.'
}
}