По мотивам применения Password Settings objects (PSOs) с нацеливанием объектов PSO на доменные группы безопасности встаёт вопрос о поддержании состава этих групп в актуальном состоянии. В моём окружении все учетные записи, находящиеся в определённом OU, должны быть включены в доменную группу безопасности, к которой применяется PSO, что само по себе уже есть критерий, по которому можно автоматизировать задачу поддержания группы в актуальном состоянии с помощью PowerShell. Представляю соответствующий скрипт.
В скрипте в блоке переменных необходимо указать DN имя OU, в котором расположены пользователи и DN имя доменной группы безопасности.
# Блок переменных # $LDAPPathOU - ADSI путь к контейнеру с доменными учетными записями пользователей (в формате LDAP://distinguishedName) # $LDAPPathSG - ADSI путь к доменной группе безопасности (в формате LDAP://distinguishedName) # $CountDisabledUsers - Признак необходимости обработки отключенных учетных записей пользователей (1 или 0) # $CountServiceUsers - Признак необходимости обработки сервисных учетных записей пользователей (1 или 0) # $CountAdministrators - Признак необходимости обработки административных учетных записей пользователей (1 или 0) # $LDAPPathOU = 'LDAP://OU=Branch Users,DC=mydom,DC=com' $LDAPPathSG = 'LDAP://CN=KOM-SRV-PSO-Users,OU=My Groups,DC=mydom,DC=com' $CountDisabledUsers = 0 $CountServiceUsers = 0 $CountAdministrators = 0 # # Блок поиска # $DomainOU = [ADSI]$LDAPPathOU $DomainSG = [ADSI]$LDAPPathSG $Searcher = New-Object System.DirectoryServices.DirectorySearcher($DomainOU) $Filter = '(objectCategory=person)(objectClass=user)' If ($CountDisabledUsers -eq 0) { $Filter = $Filter + '(!(userAccountControl:1.2.840.113556.1.4.803:=2))' } If ($CountServiceUsers -eq 0) { $Filter = $Filter + '(!(sAMAccountName=s-*))' } If ($CountAdministrators -eq 0) { $Filter = $Filter + '(!(sAMAccountName=a-*))' } $Filter = '(&' + $Filter + ')' $Searcher.Filter = $Filter $Searcher.PageSize = 5000 [Void]$Searcher.PropertiesToLoad.Add('cn') [Void]$Searcher.PropertiesToLoad.Add('distinguishedName') $Users = $Searcher.findall() # # Блок наполнения группы безопасности # $OldMembers = $DomainSG.member $NewMembers = $null ForEach ($User in $Users){ $UserDN = $User.Properties.distinguishedname If ($OldMembers -notcontains $UserDN) { $NewMembers = $NewMembers + $UserDN Write-Host 'Add user:' $User.Properties.cn } } # Write-Host '--------------------------------------------' Write-Host 'Total user accounts in OU: ' $Users.Count # If ($NewMembers -ne $null){ $AllMembers = $OldMembers + $NewMembers $DomainSG.member = $AllMembers $DomainSG.SetInfo() Write-Host 'Old users in group: ' $OldMembers.Count Write-Host 'New users in group: ' $NewMembers.Count } Write-Host 'Current users in group: ' $AllMembers.Count Write-Host '--------------------------------------------'
Для запуска скрипта на периодической основе, на контроллере домена в планировщике задач создаем новую задачу с следующими настройками:
Запуск задачи выполняем с повышенными привилегиями от имени системы
Задаем расписание выполнения скрипта , например один раз в сутки будет в большинстве случаев вполне достаточно.
В качестве основного действия укажем запуск PowerShell с передачей в качестве параметра полного пути к скрипту
Теперь после появления в целевом OU новой учетной записи, она по заданному расписанию будет включена в группу безопасности, к которой применяются настройки Password Settings objects (PSOs).
Обратная ссылка: PowerShell – Обновление группы безопасности для Password Settings objects (PSOs) | Блог IT-KB /