После внедрения Audit Collector из состава System Center 2012 R2 Operations Manager при анализе изменений членства глобальных доменных групп безопасности стало очевидно, что вариант описанного ранее скрипта в заметке PowerShell – Поддержание группы безопасности для Password Settings objects (PSOs) в актуальном состоянии не является оптимальным, так как в результате его выполнения каждый раз фактически происходит переписывание состава членства группы безопасности, что судя по последующему анализу журналов безопасности на контроллере домена, порождает множественные события удаления/добавления пользователей в эту самую группу. Привожу вариант измененного скрипта, использующего новые командлеты из PowerShell модуля ActiveDirectory на Windows Server 2012 R2. В обновлённом скрипте используется поиск и добавление в группу только конкретных учетных записей, а не полное переписывание членства как это было ранее.
# Блок переменных # $SearchOUDN - Контейнер с доменными учетными записями пользователей в формате distinguishedName # $LDAPPathSG - Доменная группа безопасности в формате distinguishedName # $CountDisabledUsers - Признак обработки отключенных учетных записей пользователей (1 или 0) # $CountServiceUsers - Признак обработки сервисных учетных записей пользователей (1 или 0) # $CountAdministrators - Признак обработки административных учетных записей пользователей (1 или 0) # $SearchOUDN = "OU=Branch Users,DC=holding,DC=com" $SecGroupDN = "CN=KOM-SRV-PSO-Users,OU=My Groups,DC=holding,DC=com" # $CountDisabledUsers = 0 $CountServiceUsers = 0 $CountAdministrators = 1 # # Блок поиска # $LAPF = '(objectCategory=person)(objectClass=user)' If ($CountDisabledUsers -eq 0) { $LAPF = $LAPF + '(!(userAccountControl:1.2.840.113556.1.4.803:=2))' } If ($CountServiceUsers -eq 0) { $LAPF = $LAPF + '(!(sAMAccountName=s-*))' } If ($CountAdministrators -eq 0) { $LAPF = $LAPF + '(!(sAMAccountName=a-*))' } $LAPF = '(&' + $LAPF + ')' $UsersInOU = Get-ADObject -LDAPFilter $LAPF -SearchBase $SearchOUDN # # Блок наполнения группы безопасности # $OldMembers = Get-ADGroupMember -Identity $SecGroupDN $NewMembers = @() ForEach ($User in $UsersInOU){ If ($OldMembers.DistinguishedName -notcontains $User.distinguishedName) { $NewMembers = $NewMembers + $User } } # Write-Host 'Total user accounts in OU: ' $UsersInOU.Count Write-Host 'Current users in group: ' $OldMembers.Count # If ($NewMembers.Count -gt 0){ Add-ADGroupMember -Identity $SecGroupDN -Members $NewMembers -Confirm:$False Write-Host 'Add new users in group: ' $NewMembers.Count Write-Host $NewMembers.Name $NewCount = (Get-ADGroupMember -Identity $SecGroupDN).Count Write-Host 'New users conut in group: ' $NewCount }
Обратная ссылка: PowerShell – Обновление групп безопасности политик репликации паролей RODC в Windows Server 2012 R2 | Блог IT-KB /
Спасибо!