#powershell
#powershell
Вопрос:
Я пытаюсь добавить пользователей в отдел, когда они находятся в определенном подразделении. Но я не хочу перезаписывать пользователей / изменять их, если оно не равно нулю. Потому что я не хочу, чтобы мой файл увеличивался.
Как мне это исправить?
$textfile=get-date -Format "yyyy-MM-dd"
Start-Transcript -Path "c:resultslocation A$textfile.txt"
Write-Host "Assigning / re-assigning users to a OU specific department..." -ForegroundColor Yellow
Get-ADUser -filter * -SearchBase "ou=Users,ou=Location A,ou=organization,dc=fabrikam,dc=com" |
ForEach-Object {
$user = $_
if ($user.Department -ne $null) {
try {
Set-ADUser $user -Department "Location A"
Write-Host $user.Name"moved to department" -BackgroundColor Green -ForegroundColor Black
}
catch {
Write-Host "Error occured" -BackgroundColor Red -ForegroundColor Black
}
}
}
Stop-Transcript
Комментарии:
1. Добро пожаловать в StackOverflow, пожалуйста, определите, что вы ожидаете от скрипта и что не так с фактическим поведением. В качестве примечания:
$null
должно быть слева от сравнения равенства :if ($Null -eq $user.Department) {...
2. Спасибо, если я выполняю этот скрипт в первый раз, я ожидаю, что пунктом назначения станет «Местоположение А», и будет сгенерирован вывод о настроенных пользователях. Однако, когда скрипт запускается на следующий день, я хочу, чтобы только новые пользователи (или пользователи без отдела) были изменены и зарегистрированы. Существующие пользователи или пользователи с уже установленным отделом не должны быть изменены или добавлены в текстовый файл. На данный момент я продолжаю получать: Назначение пользователей в определенный отдел подразделения… пользователь1 перемещен в отдел, пользователь2 перемещен в отдел. Следующий запуск не должен включать user1 или user2.
3. Скрипт работает нормально, однако он не фильтрует пользователей по существующему отделу.
4. Пожалуйста, укажите эту информацию в вопросе (не в комментариях), чтобы другие также хорошо понимали проблему и чего вы ожидаете.
5. Если я правильно понимаю, вы хотите перемещать только пользователей, у которых НЕ заполнен атрибут отдела, поэтому в этом случае ваш тест не должен быть
if ([string]::IsNullOrWhiteSpace($user.Department)) {..}
?
Ответ №1:
Это распространенный вопрос о тайнах фильтров Active Directory. Этот фильтр вернет объекты с нулевыми свойствами отдела.
get-aduser -filter "department -notlike '*'" -ResultSetSize 5 -property department
Ответ №2:
как указал @js2010, Get-ADUser
будет извлекаться только очень небольшое подмножество свойств AD, отдел, не является одним из них, поэтому, когда вы его тестируете, оно всегда будет нулевым. Чтобы избежать этого, добавьте -Properties department
параметр в Get-ADUser
. (Вы также должны предпочесть его фильтр, просто добавьте нужную базу поиска)
Но есть еще одна проблема, если вы хотите протестировать это после того, как, как вы это сделали, ваше условие отменяется: вы тестируете, чтобы заменить только те значения, которые уже определены, -eq
будет лучше 😉 как сказал @iRon, вы должны предпочесть $null -eq $user.department
than $user.department -eq $null
(у @Theo тоже все в порядке)