Powershell; нужна помощь в очистке результатов
все, здесь PowerShell n00b. Наслаждаюсь до сих пор!
У меня есть список пользователей, которых мне нужно сравнить с AD.
Я создал сценарий для поиска Get-ADUser Name и EmailAddress для каждого пользователя, используя массив Divisions в качестве фильтра.
Если пользователь AD найден, найден пользователь узла записи, покажите имя, адрес электронной почты! Достаточно просто.
Если использование AD НЕ обнаружено, продолжайте цикл по всем разделам до последнего, если не найдено ни в одном из подразделений, печатайте ТОЛЬКО ОДИН РАЗ «пользователь не найден в AD»
Я играл с различными циклами Do-While, Do-until и операторами If-ElseIf, но я не могу понять, чтобы он сообщал только ОДИН РАЗ, если он не найден ни в одном из подразделений.
Пожалуйста помоги! Заранее спасибо! :)
$Divisions="1","2","3"
$lastd = $Divisions | Select-Object -Last 1
Foreach ($d in $Divisions){
$aduser = Get-ADUser -Filter "Surname -like '*$lastname' -and GivenName -like '$givenname*'`
-and Enabled -eq '$True' -and Division -eq '$d'"`
-SearchBase "OU" -Properties Name, Division, EmailAddress |Select-Object Name,Division,EmailAddress
if(!$aduser){
write-host "Usernotfound"
}
if($aduser -eq ""){
write-host "user not found in AD" `n
}
else{
write-host "User Found in $d :" $aduser.Name $aduser.EmailAddress -F Green `n
}
}
Вот пример результата, когда я запускаю скрипт.
USER1 - account will be terminated in 35 days; Last signon activity 2 days ago
****Searching: Active Directory Information
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
User Found in Division1! Name EmailAddress
USER2 - account will be terminated in 43 days; Last signon activity 4 days ago
****Searching: Active Directory Information
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
User Found in Division2! Name EmailAddress
Usernotfound
Usernotfound
Usernotfound
Я уверен, что это легко для ваших воинов PS, но я умираю здесь. Как это можно сделать лучше? Спасибо!
1 ответ
Поскольку ваш
foreach
кажется, что цикл относится только к одному пользователю (при многократном поиске этого одного пользователя в нескольких подразделениях), вы можете просто переместить ненайденный тест после цикла:
foreach ($d in $Divisions) {
$aduser =
Get-ADUser -Filter "Surname -like '*$lastname' -and GivenName -like '$givenname*' -and Enabled -eq 'True' -and Division -eq '$d'" -Properties Name, Division, EmailAddress |
Select-Object Name,Division,EmailAddress
if ($adUser) {
Write-Host "User Found in $d :" $aduser.Name $aduser.EmailAddress -F Green `n
break # Presumably you needn't keep searching.
}
}
if (-not $aduser) {
Write-Host "Usernotfound"
}