You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Set-Acl运行触发未授权访问异常,操作用户为目标文件夹所有者

问题排查与修复方案
  • 第一个坑:共享权限校验不到位
    你只校验了NTFS权限,需要再检查\\srv\Projekty的共享级权限,确保domain\project_creation用户在共享权限中被授予了完全控制或修改权限,Windows中共享权限和NTFS权限是取交集生效,只要有一端权限不足就会触发未授权错误。
  • 第二个坑:路径解析错误
    你代码中使用了相对路径和变量拼接的方式构造路径,在UNC共享路径下PowerShell的工作目录解析极易出现偏差:
    1. Get-ChildItem返回的是DirectoryInfo/FileInfo对象,直接拼接$root\PROJEKT TEMPLATE\$folder不会按照预期拼接为完整路径
    2. Set-Acl时使用相对路径$folder,在网络共享场景下经常出现路径识别错误
  • 第三个坑:ACL对象包含SACL导致写入失败
    Get-Acl默认会读取目标对象的SACL(系统访问控制列表,用于审计),如果你的模板文件夹的SACL配置限制了当前用户读取,哪怕你有DACL修改权限,也会导致Set-Acl写入时触发未授权错误。
  • 第四个坑:ACL设置顺序错误
    你当前代码先修改子文件夹权限,再修改父文件夹权限,父文件夹的权限继承规则会覆盖你刚刚设置的子文件夹权限,不仅做了无用功,还可能触发继承规则导致的写入冲突。
  • 第五个坑:未过滤子对象类型
    Get-ChildItem默认会同时返回文件和文件夹,如果模板根目录下存在文件,你拼接的模板路径会指向不存在的文件夹,直接触发报错。

修复后的代码片段

try{
    # 先关闭新文件夹的权限继承,避免上层权限干扰
    $newFolderAcl = Get-Acl -Path $project_folder_full_location
    # 第一个参数$true=禁用继承,第二个参数$false=删除继承来的权限,需要保留继承权限可改为$true
    $newFolderAcl.SetAccessRuleProtection($true, $false)
    Set-Acl -Path $project_folder_full_location -AclObject $newFolderAcl

    # 先设置父文件夹的模板ACL
    $templateRootAcl = Get-Acl -Path "$root\PROJEKT TEMPLATE"
    # 只保留DACL,过滤SACL避免权限问题
    $templateRootAcl.SetSecurityDescriptorSddlForm($templateRootAcl.Sddl.Split('S:')[0])
    Set-Acl -Path $project_folder_full_location -AclObject $templateRootAcl

    # 遍历模板的子文件夹,全部用绝对路径操作,只取文件夹
    foreach($templateSubFolder in Get-ChildItem -Path "$root\PROJEKT TEMPLATE" -Directory){
        $targetSubFolderPath = Join-Path -Path $project_folder_full_location -ChildPath $templateSubFolder.Name
        $subAcl = Get-Acl -Path $templateSubFolder.FullName
        $subAcl.SetSecurityDescriptorSddlForm($subAcl.Sddl.Split('S:')[0])
        Set-Acl -Path $targetSubFolderPath -AclObject $subAcl
    }
    Write-host "Struktura katalogowa została utworzona"
}catch{
    Write-Error $_
    pause
}

额外验证项

如果修改后仍然报错,可以执行以下操作定位问题:

  1. 直接在PowerShell中手动执行Get-Acl "\\srv\Projekty\PROJEKT TEMPLATE\01_Dokumenty_przed_oferta" | Set-Acl "\\srv\Projekty\2021\9_21_testv6\01_Dokumenty_przed_oferta",确认是否报错,排除代码逻辑问题
  2. 检查模板文件夹是否开启了强制继承之类的特殊权限配置,或者是否存在加密、属性为只读的情况

内容的提问来源于stack exchange,提问作者aarbuzik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:45:03