PowerShell: сбой сценария, поскольку объекты AD не были реплицированы достаточно скоро

У меня есть сценарий, который создает две группы, полный папок, и устанавливает разрешения для этих папок. В моей среде тестирования все эти процессы работают без проблем, но в моей производственной среде я сталкиваюсь с проблемой. Установка разрешений для папок не удалась, поскольку созданные мной группы не реплицировались через все 8 моих контроллеров домена. Может ли PowerShell работать только с одним из контроллеров домена, чтобы мне не пришлось ждать репликации? Должен ли я перевести скрипт в спящий режим на X секунд? Или есть какой-нибудь способ узнать, есть ли группы на всех DC или хотя бы на той, на которой я работаю?

Вот как я делаю группы:

New-ADGroup -Name $Admin_GRP -path "OU=Users,OU=Sandbox,DC=test,DC=local" -GroupScope Global
New-ADGroup -Name $User_GRP -path "OU=Users,OU=Sandbox,DC=test,DC=local" -GroupScope Global

Вот как я устанавливаю разрешения для одной из папок:

#Set permissions on root directory
$ACL = Get-Acl $PathToFolder
#For Admin
$Permission = $Admin_GRP,"Write,ReadAndExecute,Synchronize,DeleteSubdirectoriesAndFiles","Allow"
$Access_Rule = New-Object System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.AddAccessRule($Access_Rule)
$ACL | Set-Acl $PathToFolder
#For Users
$Permission = $User_GRP,"ReadAndExecute,Synchronize","Allow"
$Access_Rule = New-Object System.Security.AccessControl.FileSystemAccessRule $Permission
$ACL.AddAccessRule($Access_Rule)
$ACL | Set-Acl $PathToFolder

Ответы на вопрос(4)

У меня была точно такая же проблема. Оказывается, наша файловая система обновляет только свой собственный кэш SID каждые 20 - 30 секунд. Поэтому, если бы я создал новый SID и сразу попытался применить его к папке, наша файловая система сказала бы, что SID неизвестен. Я изменил настройку в нашей файловой системе, чтобы она могла принимать «неизвестные» идентификаторы безопасности (даже если они были известны AD, и они просто не обновлялись). Больше информации здесь:

Проблемы с New-ADGroup, Set-ACL и сетевыми папками

Спать сценарий определенно не вариант, когда у вас есть 7,5 миллионов файлов и папок!

В прошлом при написании сценариев оболочки я вызывал NLTEST.EXE, чтобы указать текущему ПК / серверу на конкретный DC (обычно я выбираю эмулятор PDC). Я не могу вспомнить, какой переключатель я использовал. Не уверен, поможет ли это.

Я решил использовать цикл while для проверки репликации группы.

#Wait for group replication
while ($Admin_GRP_CHK -ne 'group')
{$Admin_GRP_CHK = (Get-ADGroup $Admin_GRP).ObjectClass
trap {'Admin group not replicated yet. Waiting 10 seconds.' -f $_.Exception.Message;    continue}
Start-Sleep -Seconds 10
}
Write-Host 'Admin group exists'
 Remko14 окт. 2010 г., 11:12
В более широкой среде AD репликация может занять некоторое время, поэтому я считаю, что это плохой подход.
Решение Вопроса

Установите разрешение на SID новой группы вместо ее имени / имени samaccount.

 Remko05 окт. 2010 г., 17:27
Да, здесь вы столкнулись с той же проблемой, вы должны прочитать SID из созданного объекта (я предполагаю, что $ Admin_GRP - это имя учетной записи, а не объект)
 pizzim1305 окт. 2010 г., 15:29
Я получаю ту же ошибку "Исключение вызывает" Translate "с аргументом (ами)" 1 ":" Некоторые или все ссылки на идентификаторы не могут быть переведены ". At: line: 36 char: 83 + $ Admin_SID = (система нового объекта .security.principal.NtAccount ($ Admin_GRP)). translate <<<< ([system.security.principal.securityidentifier]). value "

Ваш ответ на вопрос