Ошибка Setaccesscontrol с неожиданным кодом ошибки 122 - PullRequest
0 голосов
/ 15 января 2019

У нас есть сценарий 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)
}

Этот скрипт работает, как и ожидалось, почти все время, но иногда мы сталкиваемся со следующими проблемами

  1. Папка создается без набора ACL, без установленного владельца, в конечном итоге замораживая ее от доступа / удаления
  2. Установка контроля доступа завершается с ошибкой 122 'Область данных, переданная системному вызову, слишком мала.'

Это не воспроизводится постоянно, это случается редко, но это происходит. Может кто-нибудь поделиться своими мыслями о том, что можно сделать, чтобы избавиться от этого?

Заранее спасибо

...