Как и в предыдущей заметке было решено оптимизировать скрипт изложенный ранее в заметке PowerShell – Поддержание групп безопасности политики репликации паролей RODC в актуальном состоянии для выполнения с использованием новых командлетов из PowerShell модуля ActiveDirectory на Windows Server 2012 R2 таким образом, чтобы в результате работы скрипта не происходило полное переписывание членства пользователей в группах безопасности.
Для работы скрипта потребуется конфигурационный файл в формате *.csv, в котором будет содержаться информация о том, какие OU в домене будут использоваться для поиска учетных записей пользователей и заполнения ими определённых групп репликации паролей. Каждая строчка файла представляет собой связку DN доменной группы безопасности репликации паролей и DN OU. Файл должен иметь примерно такое содержание:
RODCAllowGroupDN;UsersOUDN
CN=RODC-Group1,OU=Groups,DC=mydom,DC=com;OU=Branch1,DC=mydom,DC=com
CN=RODC-Group2,OU=Groups,DC=mydom,DC=com;OU=Branch2,DC=mydom,DC=com
CN=RODC-Group3,OU=Groups,DC=mydom,DC=com;OU=Branch3,DC=mydom,DC=com
В самом скрипте в блоке переменных в переменной $DataFile нужно указать полный путь к соответствующему CSV файлу.
# Блок переменных # $DataFile - Путь к файлу для сопоставления групп безопасности c OU # $CountDisabledUsers - Признак обработки отключенных учетных записей пользователей (1 или 0) # $CountServiceUsers - Признак обработки сервисных учетных записей пользователей (1 или 0) # $CountAdministrators - Признак обработки административных учетных записей пользователей (1 или 0) # $DataFile = '.\RODC-AddUsersToGroupsFromOUs.csv' $CountDisabledUsers = 0 $CountServiceUsers = 1 $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 + ')' # # Функция сравнения и наполнения группы безопасности # Function AddUsersToGroupFromOU ($GroupDN, $OUDN) { Write-Host 'Processing group: ' $GroupDN Write-Host 'Search in OU: ' $OUDN $UsersInOU = @() $OldMembers = @() $NewMembers = @() # $UsersInOU = Get-ADObject -LDAPFilter $LAPF -SearchBase $OUDN $OldMembers = Get-ADGroupMember -Identity $GroupDN ForEach ($User in $UsersInOU){ If ($OldMembers.DistinguishedName -notcontains $User.distinguishedName) { $NewMembers = $NewMembers + $User } } # Write-Host 'Users count in OU: ' $UsersInOU.Count Write-Host 'Users count in group: ' $OldMembers.Count # If ($NewMembers.Count -gt 0){ Add-ADGroupMember -Identity $GroupDN -Members $NewMembers -Confirm:$False Write-Host 'Add new users in group: ' $NewMembers.Count Write-Host $NewMembers.Name $NewCount = (Get-ADGroupMember -Identity $GroupDN).Count Write-Host 'New users conut in group: ' $NewCount } } # # Обработка входных данных файла # $ConvFile = $DataFile + '_unicode' Get-Content $DataFile | Set-Content $ConvFile -Encoding Unicode Import-CSV $ConvFile -Delimiter ';' | ForEach-Object { AddUsersToGroupFromOU $_.RODCAllowGroupDN $_.UsersOUDN } Remove-Item $ConvFile
Добавить комментарий