S
S
Sergey2015-03-03 14:44:21
PowerShell
Sergey, 2015-03-03 14:44:21

Is everything correct in the script?

There is such a script, I tried to assemble it from 2 separate ones that I found on the Internet.
The task is very simple - find all disabled accounts in the AD domain, assign them the default group "Domain Users" and exclude them from all others.

# Определяем текущую дату
$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). 
# Что собственно повлияет на время выполнения скрипта.

Tried to run the script. In the powerShell ISE Editor, the cursor is blinking, the log file is being written, the domain is large, so I did not wait until the end of the execution.
Interested in the opinion of "experienced" - is everything done right?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
G
GuessWh0, 2016-12-12
@GuessWh0

primarygroupid='513'

Isn't the SID of the group completely supposed to be here? in the form: S-1-5-21-2569462080-3020068508-3565964549-68205

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question