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

PowerShell设置用户文件夹FullControl权限报错:身份引用无法转换

解决PowerShell设置文件夹ACL时的身份识别错误

错误原因

报错Some or all identity references could not be translated.是因为系统无法将你传入的用户标识符转换为有效的安全主体,大概率是CSV里的用户格式不对,或者用户在当前域/系统中不存在。

解决步骤

  • 修正CSV用户格式:必须使用域名\用户名或者UPN格式(user@domain.com),不能只写单独的用户名,比如把jdoe改成CONTOSO\jdoe。
  • 验证用户有效性:在循环里添加用户存在性检查,避免无效用户导致报错。
  • 修复UNC路径:你的文件夹路径\ypdcwnwinfs001\H$\Home少了一个反斜杠,应该写成\\ypdcwnwinfs001\H$\Home,否则PowerShell会识别为相对路径。
  • 清理冗余的ACL操作:代码里同时调用了SetAccessRule和AddAccessRule,选一个即可——SetAccessRule会替换用户的现有权限,AddAccessRule是追加权限,重复调用会导致逻辑混乱。
  • 完善权限规则参数:添加继承和传播设置,确保权限能正确应用到子文件夹和文件。

修改后的完整代码

# Import the CSV file
$csvFilePath = "C:\path\folders.csv"
$folders = Import-Csv -Path $csvFilePath

# Loop through each row in the CSV
foreach ($folder in $folders) {
    # 修正UNC路径格式
    $folderPath = "\\ypdcwnwinfs001\H$\Home\" + $folder.FolderName
    # 创建文件夹(-Force会自动创建父目录)
    New-Item -ItemType Directory -Path $folderPath -Force

    # 获取当前文件夹ACL
    $acl = Get-Acl -Path $folderPath
    $user = $folder.users

    # 验证用户身份是否有效
    try {
        $ntAccount = [System.Security.Principal.NTAccount]$user
        $sid = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier])
        Write-Host "用户 $user 身份验证成功"
    }
    catch {
        Write-Error "用户 $user 不存在或格式错误:$_"
        continue # 跳过无效用户的文件夹权限设置
    }

    # 定义权限参数
    $permission = "FullControl"
    $accessType = "Allow"
    # 添加继承和传播设置:容器和对象都继承,不传播到父项
    $inheritanceFlags = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
    $propagationFlags = [System.Security.AccessControl.PropagationFlags]::None

    # 创建完整的访问规则
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
        $user,
        $permission,
        $inheritanceFlags,
        $propagationFlags,
        $accessType
    )

    # 添加权限规则(替换用SetAccessRule,追加用AddAccessRule,二选一)
    $acl.AddAccessRule($accessRule)

    # 应用更新后的ACL
    Set-Acl -Path $folderPath -AclObject $acl
    Write-Host "已成功为文件夹 $folderPath 分配 $user 的FullControl权限"
}

额外注意事项

  • 如果是域环境,确保运行脚本的机器已加入域,且有权限查询AD用户(可以用Get-ADUser $user替代Translate方法来验证,需要先导入AD模块:Import-Module ActiveDirectory)。
  • 检查共享路径\\ypdcwnwinfs001\H$\Home是否能正常访问,运行脚本的账号需要有该路径的读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:06