|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] удаление пользователя со всех групп за исключением Domain Users |
|
|
PowerShell - [решено] удаление пользователя со всех групп за исключением Domain Users
|
Пользователь Сообщения: 54 |
Доброго дня!
Задача: Организовать процедуру удаления пользователя со всех групп за исключением 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). Что собственно повлияет на время выполнения скрипта. Отсутствует закрывающая ")" в выражении. 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 Сам в языке смысле мало. Связаться с автором не могу. Помогите, пожалуйста, как его поправить. |
|
Отправлено: 11:15, 13-10-2014 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Проблем в скрипте - нет, скорее всего просто неправильно скопирован скрипт.
|
Отправлено: 11:24, 13-10-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Странно, специально удалил и вставил снова все (){}"" '' на английской раскладке, но не помогло, всё равно говорит, что отсутствует закрывающая скобка )
|
Отправлено: 12:38, 13-10-2014 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Скриншот приведите : Get-Content C:\Users\**\Desktop\Disable_Group.ps1
|
Отправлено: 12:50, 13-10-2014 | #4 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Сделал, только кракозябры почему-то.
|
|
Отправлено: 13:59, 13-10-2014 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Вот и ответ, что не осилили сохранить файл в правильной кодировке.
|
Отправлено: 14:07, 13-10-2014 | #6 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Перекодировал в 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 |
Отправлено: 14:23, 13-10-2014 | #7 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Как все же упорно сопротивляетесь правильно скопировать скрипт. TerminatorExpectedAtEndOfString - проблема с форматом кавычек.
ЗЫ. Попросите системного администратора скопировать скрипт правильно. |
Отправлено: 14:36, 13-10-2014 | #8 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Разобрался!
Оказывается апострафы ' надо вставлять в те места, где ошибки даёт)) Спасибо! |
Отправлено: 14:58, 13-10-2014 | #9 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Kazun,
А вы не подскажите как можно сделать так, чтобы скрипт искал отключенные записи не во всём домене, а в определённом орг юните? |
Отправлено: 15:49, 13-10-2014 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удаление всех разделов в ветке реестра "Interfaces" за исключением одной. | intelem | Скриптовые языки администрирования Windows | 5 | 18-01-2013 20:29 | |
2008 R2 - Удаление Domain Policy | pokul | Windows Server 2008/2008 R2 | 0 | 20-03-2012 14:30 | |
PowerShell - [решено] Удаление пользователя из групп | forsem | Скриптовые языки администрирования Windows | 3 | 29-11-2011 21:43 | |
2008 R2 - [решено] Domain users и административные шары: откуда взялся доступ??? | VladDV | Windows Server 2008/2008 R2 | 12 | 22-05-2010 14:59 | |
EFS + Domain Users | EndErr | Microsoft Windows NT/2000/2003 | 5 | 17-01-2008 14:34 |
|