Фильтр поиска не может быть распознан - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь проверить ввод пользователя с помощью Do-until я хочу, чтобы программа продолжала цикл до тех пор, пока не был введен правильный ввод, который работает, когда пользователи дают какой-либо ввод независимо от того, что это такое, но когда значение пустое "", я застреваю в бесконечном цикле, который продолжает давать мне эта ошибка

The user does exist in AD:
samaccountname: 'the username'
Full Name: 'the fullname'  

get-aduser : The search filter cannot be recognized
At line:6 char:9
+ $user = get-aduser -Filter "samaccountname -eq '$SiteOwner' -OR name  -eq '$SiteO ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Get-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADUser

это мой код:

Import-Module ActiveDirectory
Do{

$SiteOwner = Read-Host 'OwnerAlias'

Do {
$user = get-aduser -Filter "samaccountname -eq '$SiteOwner' -OR name -eq '$SiteOwner'"
If (!$user) {
  "The user does not exist in AD"
} 
Else {
"The user does exist in AD:`nsamaccountname: $($user.samaccountname)`nFull Name: $($user.name)"
}



}While (($null -eq $SiteOwner) -or ( "" -eq $SiteOwner))
}Until ($user)

что я делаю не так?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вот версия вашего кода, которая работает:

# Ensure variables are null - may not be needed, depending on the rest of your code (if any)
$user = $null
$SiteOwner = $null

# Assuming $user is null we should do a lookup
while(-not $user) {
    $SiteOwner = Read-Host 'OwnerAlias'

    # As long as the user entered some text, query AD - otherwise, skip this and ask again
    if (-not [string]::IsNullOrWhiteSpace($SiteOwner)) {
        $user = Get-AdUser -Filter "samaccountname -eq '$SiteOwner' -OR name -eq '$SiteOwner'"

        if (-not $user) {
          # Found the user - we should exit the while
          "The user does not exist in AD"
        } 
        else {
          # Didn't find the user - ask for the name again
          "The user does exist in AD:`nsamaccountname: $($user.samaccountname)`nFull Name: $($user.name)"
        }
    }
}
1 голос
/ 18 апреля 2019

Проблема в том, что с "" в качестве входных данных выдается ошибка завершения.Вы можете объяснить это с помощью блока try-catch.Внутри этого вы можете добавить оператор break для выхода из второго цикла do-until.Это, вероятно, может быть разработан по-другому, хотя.

Do{

  $SiteOwner = Read-Host 'OwnerAlias'

  Do {
    try {
      $user = get-aduser -Filter "samaccountname -eq '$SiteOwner' -OR name -eq '$SiteOwner'"
    }
    catch {
      "The user does not exist in AD"
      break
    }
    If (!$user) {
      "The user does not exist in AD"
    } 
    Else {
      "The user does exist in AD:`nsamaccountname: $($user.samaccountname)`nFull Name: $($user.name)"
    }

  }While (($null -eq $SiteOwner) -or ( "" -eq $SiteOwner))
}Until ($user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...