ADUser назначает конкретный отдел, если null

#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 тоже все в порядке)