Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] удаление пользователя со всех групп за исключением Domain Users (http://forum.oszone.net/showthread.php?t=289311)

ZEvS-master 13-10-2014 11:15 2414567

удаление пользователя со всех групп за исключением Domain Users
 
Доброго дня!

Задача:
Организовать процедуру удаления пользователя со всех групп за исключением 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 2414573

Проблем в скрипте - нет, скорее всего просто неправильно скопирован скрипт.

ZEvS-master 13-10-2014 12:38 2414618

Странно, специально удалил и вставил снова все (){}"" '' на английской раскладке, но не помогло, всё равно говорит, что отсутствует закрывающая скобка )

Kazun 13-10-2014 12:50 2414621

Скриншот приведите : Get-Content C:\Users\**\Desktop\Disable_Group.ps1

ZEvS-master 13-10-2014 13:59 2414653

Вложений: 1
Сделал, только кракозябры почему-то.

Kazun 13-10-2014 14:07 2414660

Вот и ответ, что не осилили сохранить файл в правильной кодировке.

ZEvS-master 13-10-2014 14:23 2414668

Перекодировал в 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 2414673

Как все же упорно сопротивляетесь правильно скопировать скрипт. TerminatorExpectedAtEndOfString - проблема с форматом кавычек.

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

ZEvS-master 13-10-2014 14:58 2414679

Разобрался!
Оказывается апострафы ' надо вставлять в те места, где ошибки даёт))
Спасибо!

ZEvS-master 13-10-2014 15:49 2414706

Kazun,
А вы не подскажите как можно сделать так, чтобы скрипт искал отключенные записи не во всём домене, а в определённом орг юните?

Kazun 13-10-2014 16:29 2414733

Код:

$users = Get-ADUser -Filter 'Enabled -eq $false' -SearchBase "OU=MYUSERS,DC=Contoso,DC=Com"

ZEvS-master 13-10-2014 16:43 2414748

Kazun,
Большущее Вам спасибо! Очень помогли!


Время: 20:23.

Время: 20:23.
© OSzone.net 2001-