无权限用户PowerShell脚本开发:创建文件夹结构并配置只读权限
为无权限用户创建文件夹结构并配置只读权限的PowerShell脚本方案
针对你要给无权限用户开发脚本的需求,我把代码补全并优化了逻辑,确保能可靠完成文件夹创建和只读权限配置的工作。这里是完整的实现:
完整脚本代码
# 定义核心变量 $cr = "D:\TargetRoot" # 替换为你的目标根路径 $persons = @("User1", "User2", "Domain\User3") # 替换为要授权的用户列表 $cred = Get-Credential # 获取具有根目录修改权限的凭据(如果需要) # 挂载PSDrive(如果需要通过特定凭据访问目标路径) New-PSDrive -Name "target" -PSProvider "FileSystem" -Credential $cred -Root $cr | Out-Null # 循环处理每个用户 foreach ($pers in $persons) { # 定义用户专属的文件夹路径(可根据需求调整结构,比如添加子文件夹) $userFolderPath = Join-Path -Path "target:\" -ChildPath $pers $subFolderPath = Join-Path -Path $userFolderPath -ChildPath "Documents" # 示例子文件夹 # 1. 创建文件夹结构(-Force确保父文件夹不存在时自动创建) New-Item -Path $userFolderPath, $subFolderPath -ItemType Directory -Force | Out-Null # 2. 配置只读权限 # 获取文件夹的当前ACL $acl = Get-Acl -Path $userFolderPath # 定义只读权限规则:ReadAndExecute,继承到子容器和对象,无传播限制 $readOnly = [System.Security.AccessControl.FileSystemRights]"ReadAndExecute" $inheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagationFlag = [System.Security.AccessControl.PropagationFlags]"None" $accessControlType = [System.Security.AccessControl.AccessControlType]"Allow" # 创建访问规则对象 $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $pers, $readOnly, $inheritanceFlag, $propagationFlag, $accessControlType ) # 将规则添加到ACL(避免重复添加) if (-not $acl.Access | Where-Object { $_.IdentityReference.Value -eq $pers -and $_.FileSystemRights -eq $readOnly -and $_.AccessControlType -eq $accessControlType }) { $acl.AddAccessRule($accessRule) # 应用修改后的ACL到文件夹 Set-Acl -Path $userFolderPath -AclObject $acl Write-Host "已为用户 $pers 在 $userFolderPath 配置只读权限" } else { Write-Host "用户 $pers 在 $userFolderPath 的只读权限已存在,无需重复设置" } } # 卸载PSDrive(可选) Remove-PSDrive -Name "target"
关键部分说明
- 文件夹结构创建:用
New-Item -Force确保即使父文件夹不存在也能自动创建,你可以根据需求调整$userFolderPath和$subFolderPath来定义更复杂的层级。 - 权限配置细节:
- 权限选择
ReadAndExecute,包含了文件夹的只读浏览和文件执行权限(符合常规只读需求) - 继承规则设置为
ContainerInherit, ObjectInherit,确保权限会应用到子文件夹和文件 - 添加了权限存在性检查,避免重复添加相同规则导致的ACL冗余
- 权限选择
- PSDrive使用:如果目标路径需要跨域或者不同凭据访问,挂载PSDrive是个可靠的方式;如果本地执行且已有权限,也可以直接操作本地路径,去掉PSDrive相关代码即可。
注意事项
- 请以管理员身份运行脚本,确保有足够权限修改文件夹权限
- 替换
$cr和$persons变量为你的实际路径和用户列表 - 如果是域用户,记得在用户名前加上域名(比如
Domain\Username)
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

