У нас есть сценарий powershell, который выполняется как часть нашего развертывания, который должен создать ожидаемую иерархию каталогов на Windows NAS.
Считывает ожидаемые UNC-пути из CSV.
Проверяет, существует ли каталог, и создает его, если не найден
После создания каталога он назначает определенным пользователям / группам домена права на чтение и / или изменение этих путей
Модификация ACL выполняется примерно так же в Powershell
$dir=Get-Item -Path $uncpath #e.g. \\server\environment\configuration
$acl = $dir.GetAccessControl()
$userTobeAdded = 'domain\user'
$acl.SetAccessRuleProtection($true,$false)
$accountTobeAdded = New-Object System.Security.Principal.NTAccount $userTobeAdded
$hasAccessAlready = $acl.GetAccessRules($true,$false,[System.Security.Principal.NTAccount]) | Where-Object {
$_.FileSystemRights -eq "Modify" -and
$_.AccessControlType -eq "Allow" -and
$_.IdentityReference -eq $Account
}
if(!$hasAccessAlready)
{
$newRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($userTobeAdded,
'Modify',
'ContainerInherit|ObjectInherit',
'None', 'Allow')
$acls.AddAccessRule($newRule)
$dir.SetAccessControl($acls)
}
Этот скрипт работает, как и ожидалось, почти все время, но иногда мы сталкиваемся со следующими проблемами
- Папка создается без набора ACL, без установленного владельца, в конечном итоге замораживая ее от доступа / удаления
- Установка контроля доступа завершается с ошибкой 122 'Область данных, переданная системному вызову, слишком мала.'
Это не воспроизводится постоянно, это случается редко, но это происходит.
Может кто-нибудь поделиться своими мыслями о том, что можно сделать, чтобы избавиться от этого?
Заранее спасибо