PDA

Показать полную графическую версию : [решено] удаление пользователя со всех групп за исключением Domain Users


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

Сам в языке смысле мало. Связаться с автором не могу. Помогите, пожалуйста, как его поправить.

Kazun
13-10-2014, 11:24
Проблем в скрипте - нет, скорее всего просто неправильно скопирован скрипт.

ZEvS-master
13-10-2014, 12:38
Странно, специально удалил и вставил снова все (){}"" '' на английской раскладке, но не помогло, всё равно говорит, что отсутствует закрывающая скобка )

Kazun
13-10-2014, 12:50
Скриншот приведите : Get-Content C:\Users\**\Desktop\Disable_Group.ps1

ZEvS-master
13-10-2014, 13:59
Сделал, только кракозябры почему-то.

Kazun
13-10-2014, 14:07
Вот и ответ, что не осилили сохранить файл в правильной кодировке.

ZEvS-master
13-10-2014, 14:23
Перекодировал в OEM866.
Теперь другая ошибка:

В строке, начинающейся с:
C:\Users\***\Desktop\Disable_Group.ps1:25 знак:31
+ Write-Output ($user.Name +" - <<<< "+ $user.samAccountName) >> $logfile,
отсутствует терминатор: ".
C:\Users\Zatsepin\Desktop\Disable_Group.ps1:73 знак:1
+ <<<<
+ CategoryInfo : ParserError: (+ $user.samAcco...gnature block
:String) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

Kazun
13-10-2014, 14:36
Как все же упорно сопротивляетесь правильно скопировать скрипт. TerminatorExpectedAtEndOfString - проблема с форматом кавычек.

ЗЫ. Попросите системного администратора скопировать скрипт правильно.

ZEvS-master
13-10-2014, 14:58
Разобрался!
Оказывается апострафы ' надо вставлять в те места, где ошибки даёт))
Спасибо!

ZEvS-master
13-10-2014, 15:49
Kazun,
А вы не подскажите как можно сделать так, чтобы скрипт искал отключенные записи не во всём домене, а в определённом орг юните?

Kazun
13-10-2014, 16:29
$users = Get-ADUser -Filter 'Enabled -eq $false' -SearchBase "OU=MYUSERS,DC=Contoso,DC=Com"

ZEvS-master
13-10-2014, 16:43
Kazun,
Большущее Вам спасибо! Очень помогли!




© OSzone.net 2001-2012