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

使用PowerShell结合CSV批量设置用户文件夹权限遇问题求助

批量设置用户文件夹权限问题解决

问题背景

现有如下结构的CSV文件:

user,password,name
fcuadrado,P@assword,Paco Cuadrado
rita,1234@ASIR,Rita la cantaora
ccoton,Asir1234,Carmelo Conton

已通过PowerShell创建本地用户:

foreach ($users in (Import-Csv .\usuarios.csv)){
    $securepassword = ConvertTo-SecureString "$users.password" -AsPlainText -Force
    New-LocalUser -Name $users.user -Password $securepassword -FullName $users.name
}

创建用户文件夹:

foreach ($users in (Import-Csv .\usuarios.csv)){
    New-Item -Name $users.user -Path C:\users -ItemType Directory
}

但执行以下权限设置代码时出现两个问题:

  1. 循环无法正确获取CSV中的用户信息
  2. 修复信息获取问题后,所有文件夹权限都被设置给同一个用户
foreach ($users in (Import-Csv .\usuarios.csv)){
    $acl = Get-Acl -Path c:\users\$($users.user)
    $acl.SetAccessRuleProtection($true,$false)
    $acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
    $ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ($($users.user), "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
    $acl.AddAccessRule($ace)
    Set-Acl -Path "c:\users\$($users.user)" -AclObject $acl
}

问题原因及修复

1. 解决CSV用户信息获取失败问题

原代码中存在参数缺失空格的语法错误,导致PowerShell无法正确解析参数,进而无法读取CSV中的用户信息:

  • 创建用户的代码中,-Name $users.user-Password 需改为 -Name $users.user -Password
  • 创建文件夹的代码中,-Name $users.user-Path 需改为 -Name $users.user -Path
  • 权限设置代码中,确保CSV文件名与实际一致(原代码曾混用usuarios.csv和users.csv,需统一)

2. 解决权限批量设置错误问题

权限被错误分配给同一用户的核心原因:

  • 创建FileSystemAccessRule时,仅使用用户名可能导致身份解析歧义(优先匹配域用户而非本地用户)
  • 继承标志参数设置不当,导致权限规则未正确应用

修复后的权限设置代码:

foreach ($users in (Import-Csv .\usuarios.csv)){
    $userPath = "C:\users\$($users.user)"
    # 获取目标文件夹的ACL
    $acl = Get-Acl -Path $userPath
    # 禁用继承并移除原有继承的权限规则
    $acl.SetAccessRuleProtection($true, $false)
    # 移除所有现有显式权限规则
    $acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
    # 构造本地用户的完整身份标识:机器名\用户名
    $userIdentity = "$env:COMPUTERNAME\$($users.user)"
    # 创建权限规则:修正继承传播标志为"None",确保权限直接应用
    $ace = New-Object System.Security.AccessControl.FileSystemAccessRule(
        $userIdentity,
        "FullControl",
        "ContainerInherit,ObjectInherit",
        "None",
        "Allow"
    )
    # 添加权限规则到ACL
    $acl.AddAccessRule($ace)
    # 应用更新后的ACL到文件夹
    Set-Acl -Path $userPath -AclObject $acl
}

关键修复点:

  • 使用$env:COMPUTERNAME\$($users.user)指定本地用户完整身份,避免身份解析错误
  • 将继承传播标志从InheritOnly改为None,确保权限直接应用到目标文件夹及其子项
  • 引入$userPath变量统一路径,减少拼写错误

内容的提问来源于stack exchange,提问作者Sergio Sánchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:50:39