Setaccesscontrol失败,出现意外错误代码122

时间:2019-01-15 13:34:09

标签: windows powershell file-permissions nas

我们有一个Powershell脚本作为部署的一部分运行,该脚本应该在Windows NAS上创建预期的目录层次结构。

它从CSV读取预期的UNC路径。 检查目录是否存在,如果找不到则创建目录 创建目录后,它将为某些域用户/组分配对这些路径的读取和/或修改访问权限

在Powershell中对ACL进行修改有点类似

$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“传递给系统调用的数据区域太小。”

这不是一直可复制的,它很少发生,但确实如此。 任何人都可以分享一些有关如何解决此问题的想法吗?

预先感谢

0 个答案:

没有答案