Я играю с некоторым кодом PowerShell для динамического создания групп безопасности AD, а затем применяю их к папкам в общем сетевом ресурсе, но у меня возникают проблемы с разрешением вновь созданной группы.
Учтите это:
import-module activedirectory
for ($i = 0; $i -lt 10; $i++) {
$group = New-ADGroup -Path "OU=Groups,OU=Department,DC=Domain,DC=Network" -Name "z-test-group-$i" -GroupScope DomainLocal -GroupCategory Security -PassThru
$acl = Get-Acl C:\Temp
$permission = $group.SID,"FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl C:\Temp
}
Который работает нормально.
Однако, если я изменю папку на сетевую папку, такую как G: \ Temp или \\ domain.network \ DFS \ GroupShare \ Temp, я получу сообщение «Сбой метода с неожиданным кодом ошибки 1337».
Я устал использовать SetACL.exe и получил похожую ошибку:
C:\Temp\SetACL.exe -on "\\domani.network\dfs\GroupShare\Temp" -ot file -actn ace -ace "n:$GroupSID;p:full;s:y"
SetACL finished with error(s):
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: The security ID structure is invalid.
INFORMATION: Processing ACL of: <\\?\UNC\domain.network\dfs\GroupShare\Temp>
Если я подожду, скажем, от 10 до 20 секунд, и снова выполню часть кода Set-ACL (или SetACL.exe), он успешно завершится.
Сначала я подумал, что это напрямую связано с контроллерами домена (4 из них представляют собой комбинацию 2003 и 2008 R2), но тот факт, что он хорошо работал на локальных папках, был интригующим (и раздражающим).
Я сделал трассировку Wireshark во время выполнения кода в локальной папке, а затем в сетевой папке. Основное различие заключается в том, что при попытке применить ACL к сетевой папке я вижу запросы на поиск LDAP и (среди прочего) следующий ответ SMB:
NT Trans Response, FID: 0x0040, NT SET SECURITY DESC, Error: STATUS_INVALID_SID
То, что я предполагаю, является причиной того, что моя команда Set-ACL терпит неудачу.
Основной сетевой файловой системой является EMC Celerra 6.0.xx. Я очень незнаком с этой технологией, однако из того, что я понимаю, в ней содержится какой-то SID-кеш, который мог бы объяснить вышеуказанную ошибку (он еще не знает о новой группе, хотя AD знает).
Итак, я думаю, что есть два вопроса:
- Есть ли способ (PowerShell / C # ect), который не
вовлекать сон / ожидание? IE, установите ACL, хотя SID
недействительным?
- Если проблема связана с EMC Celerra (я так полагаю), есть ли
как заставить его обновить свой «SID-кеш» или что-то еще?
У меня есть прочитанных различных статей об этой проблеме, но ни одна из них не имеет эффективного разрешения (или работы для меня).
Спасибо за вашу помощь.
Рис.