У меня есть необходимость избавиться от некоторых пользователей, которые больше не существуют в AD, но все еще установлены в приложении.PowerShell превращает инструкцию if else в цикл Foreach
У меня есть сценарий, который предоставляет список пользователей и присваивает их переменной. На данный момент я хочу список пользователей, которые не являются безусловными. Это работает для одного пользователя:
#One user in an Application
$Users = $location.Users.FindAll() | where {$_.username -like "*johnsmith*"} | select username
Username
--------
JohnSmith
#See if user exists in AD (Match Username with AD UserPrincipalName)
$users = $repository.Users.FindAll() |where {$_.username -like "*johnp*"} | select username
$users2 = Get-ADUser -Filter "UserPrincipalName -eq '$($users.username)'" -Properties LastLogonDate
if (!$users2)
{
Write-Host "$users doesnt exist"
}
else
{
Write-Host "$users does exist"
}
> @{Username=JohnSmith} doesnt exist
Проблемы Я получаю кормление это цикл Еогеаспа для нескольких пользователей в переменном. Как я могу поместить это для просмотра объекта для каждого пользователя и вывода тех, которые не существуют?
#List of all users in Appication
$Users = $location.Users.FindAll() | select username
Username
--------
JohnSmith
JohnSmith1
JohnSmith2
Пытались, но не работает, показывает существование всех пользователей, даже если JohnSmith оленья кожа существовать как выше:
$users = $location.Users.FindAll() |select username
$users2 = Get-ADUser -Filter "UserPrincipalName -eq '$($users.username)'"
foreach ($users2 in $users){
if (!$users2)
{
write-host "$users2 doesnt exist"
}
else
{
write-host "$users2 does exist"
}
}
PS C:\>
@{Username=JohnSmith} does exist
@{Username=JohnSmith1} does exist
@{Username=JohnSmith2} does exist
Отлично, работал по мере необходимости, спасибо – Ralluhb
'Get-ADUser -filter *' - очень плохая практика. Не могли бы представить, сколько времени это займет для моего AD с более чем девятью тысячами (серьезно) объектами пользовательского типа. Вы должны указать некоторые критерии, иначе может потребоваться слишком много времени для извлечения всех пользовательских объектов. Я только что проверил: 2 минуты 15 секунд и ~ 500 мб моей памяти. – n01d
@ n01d Это не плохая практика сама по себе. Это зависит от его среды, которую мы не знаем, поэтому я не могу дать ему правильные критерии для улучшения производительности, если это необходимо в целом. –