如何为同一文件夹批量分配多用户/组ACL权限?脚本报错求助
解决PowerShell多用户权限设置的类型转换错误问题
这个报错的根源很明确——你在给FileSystemAccessRule构造函数传参时,类型匹配出了问题,咱们一步步拆解解决:
为什么会出现"Cannot convert value to System.Int32"错误?
FileSystemAccessRule的构造函数没有直接接受字符串数组的重载。当你把逗号分隔的字符串(或处理不当的数组)传进去时,PowerShell会尝试匹配其他重载方法,其中恰好有一个构造函数的第一个参数是Int32类型(用于权限掩码),这就导致它错误地把用户名字符串当成了要转换为整数的参数,从而抛出类型转换失败的报错。
正确的解决方案:拆分用户名并逐个处理
你需要先把Excel单元格里的逗号分隔字符串拆分成干净的用户名数组,然后循环为每个用户单独创建访问规则:
$acl = Get-Acl $homedir $FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify" $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit" $PropagationFlags = [System.Security.AccessControl.PropagationFlags]"None" # 关键步骤:处理多用户名字符串,拆分、去空格、过滤空值 $userList = $users -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' } # 循环为每个用户添加权限规则 foreach ($user in $userList) { $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $user, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType ) $acl.AddAccessRule($AccessRule) } # 务必保存修改后的ACL,否则权限不会生效 Set-Acl -Path $homedir -AclObject $acl
额外注意事项
- 如果是域环境,确保用户名格式正确(比如
DOMAIN\user1,而非仅user1),否则权限规则会无效 - 用
Trim()去掉用户名前后的空格,避免因为单元格里的user1, user2(带空格)导致识别错误 - 用
Where-Object { $_ -ne '' }过滤拆分后的空元素,防止单元格里多余的逗号创建无效规则
内容的提问来源于stack exchange,提问作者A_JE
相关产品推荐
相关产品推荐

