ZEvS-master
13-10-2014, 11:15
Доброго дня!
Задача:
Организовать процедуру удаления пользователя со всех групп за исключением Domain Users при увольнении.
Нашёл скрипт:
# Путь к файлу логов, не забудем создать его вручную. Не имеет смысла создавать его скриптом
$logfile = "C:\logs\user-groups-log.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
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $(Get-ADPrincipalGroupMembership -Identity $user | Where-Object {$_.DistinguishedName -ne 'CN=Domain Users,CN=Users,DC=domain,DC=test'})
}
}
# Для пользователей, которые находятся только в одной группе (скорее всего это Domain Users) мы не делаем ничего. Так же прошу обратить внимание, если у вас в домене практикуется смена групп по умолчанию, то в скрипт стоит добавить строчку, которая изменить значение атрибута primaryGroupID для каждого выбранного пользователя на 513 (Domain Users). Что собственно повлияет на время выполнения скрипта.
Вставил в файл PS1, запустил его и вылезла ошибка:
Отсутствует закрывающая ")" в выражении.
C:\Users\**\Desktop\Disable_Group.ps1:29 знак:1
+ <<<< Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $(Get-ADPri
ncipalGroupMembership -Identity $user | Where-Object {$_.DistinguishedName -ne
'CN=Domain Users,CN=Users,DC=domain,DC=test'})
+ CategoryInfo : ParserError: (CloseParenToken:TokenId) [], Parse
Exception
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
Сам в языке смысле мало. Связаться с автором не могу. Помогите, пожалуйста, как его поправить.
Задача:
Организовать процедуру удаления пользователя со всех групп за исключением Domain Users при увольнении.
Нашёл скрипт:
# Путь к файлу логов, не забудем создать его вручную. Не имеет смысла создавать его скриптом
$logfile = "C:\logs\user-groups-log.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
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $(Get-ADPrincipalGroupMembership -Identity $user | Where-Object {$_.DistinguishedName -ne 'CN=Domain Users,CN=Users,DC=domain,DC=test'})
}
}
# Для пользователей, которые находятся только в одной группе (скорее всего это Domain Users) мы не делаем ничего. Так же прошу обратить внимание, если у вас в домене практикуется смена групп по умолчанию, то в скрипт стоит добавить строчку, которая изменить значение атрибута primaryGroupID для каждого выбранного пользователя на 513 (Domain Users). Что собственно повлияет на время выполнения скрипта.
Вставил в файл PS1, запустил его и вылезла ошибка:
Отсутствует закрывающая ")" в выражении.
C:\Users\**\Desktop\Disable_Group.ps1:29 знак:1
+ <<<< Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $(Get-ADPri
ncipalGroupMembership -Identity $user | Where-Object {$_.DistinguishedName -ne
'CN=Domain Users,CN=Users,DC=domain,DC=test'})
+ CategoryInfo : ParserError: (CloseParenToken:TokenId) [], Parse
Exception
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
Сам в языке смысле мало. Связаться с автором не могу. Помогите, пожалуйста, как его поправить.