@hizhuns
Системный администратор

Все ли правильно в скрипте?

Вот такой есть скрипт, попытался собрать его из 2х отдльных, которые нашел в интернете.
Задача очень простая- найти все отключенные уч.записи в домене AD, назначить им группу по умолчанию "Пользователи домена" и исключить из всех прочих.

# Определяем текущую дату
$dt = Get-Date -Format "dd-MM-yyy"

# Задаем путь к логу и дату отработки
$logfile = "C:\logs\user-groups-log-$dt.txt"

# Отключаем запрос на подтверждение при удалении из групп, и вывод ошибок.
$ConfirmPreference = "None"
$ErrorActionPreference = "SilentlyContinue"

# Запишем в лог время начала работы скрипта для удобства поиска по дате
Write-Output "Дата выполнения скрипта: $(Get-Date -Format F)" >> $logfile
Write-Output "" >> $logfile

# Подключаем модуль ActiveDirectory
Import-Module ActiveDirectory

# Находим всех отключенных пользователей
$users = Get-ADUser -Filter 'Enabled -eq $false'

# И для каждого из них выполняем цыкл
foreach ($user in $users) {

# Если пользователь состоит более чем в одной группе (чтобы не выполнять с теми, кого обработал скрипт ранее)
if ((Get-ADPrincipalGroupMembership -Identity $user).Count -gt 1) {

# Записываем имя и логин пользователя, а также список его групп в лог файл
Write-Output ($user.Name +" - "+ $user.samAccountName)  >> $logfile
Get-ADPrincipalGroupMembership -Identity $user | Format-Table Name,distinguishedName  >> $logfile

# назначаем группу по умолчанию Domain Users
Set-ADUser -Identity $user -Replace @{primarygroupid='513'}

# И удаляем его из групп исключая группу Пользователи домена
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $(Get-ADPrincipalGroupMembership -Identity $user | Where-Object {$_.DistinguishedName -ne 'CN=Пользователи домена,CN=Users,DC=moscorp,DC=local'})

    }
}

# Для пользователей, которые находятся  только в одной группе (скорее всего это Domain Users) мы не делаем ничего. 
# Так же прошу обратить внимание, если у вас в домене практикуется смена групп по умолчанию, то в скрипт стоит добавить строчку, 
# которая изменить значение атрибута primaryGroupID для каждого выбранного пользователя на 513 (Domain Users). 
# Что собственно повлияет на время выполнения скрипта.


Попытался запустить скрипт. В Редакторе powerShell ISE мигает курсор, лог файл пишется, домен большой поэтому дожидаться окончания выполнения не стал.

Интересует мнение "бывалых" - все ли правильно сделано?
  • Вопрос задан
  • 2650 просмотров
Пригласить эксперта
Ответы на вопрос 1
@GuessWh0
primarygroupid='513'

тут разве не SID группы полностью должен быть? в виде: S-1-5-21-2569462080-3020068508-3565964549-68205
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы