使用PowerShell移除Authenticated Users写入修改权限失败求排查
问题分析与修复方案
原代码的问题所在
- 错误处理icacls输出:
icacls $driveLetter.Root返回的是纯文本字符串,并非可操作的权限对象。你调用的$permissions.Remove(...)是字符串的字符删除方法,根本无法移除权限条目,完全起不到修改权限的作用。 - 权限设置逻辑错误:直接把icacls的输出文本当作参数传给icacls命令,不符合icacls的语法规则,icacls无法识别这种方式来设置权限。
正确的实现代码
要移除Authenticated Users组的写入(W)和修改(M)权限,直接使用icacls自带的权限移除参数即可,无需先读取再修改权限字符串。修改后的代码如下:
$systemDrives = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -eq "H" } foreach ($drive in $systemDrives) { # 移除Authenticated Users的写入和修改权限,递归处理子项且忽略错误 icacls $drive.Root /remove:g "Authenticated Users:(W,M)" /T /C }
参数解释
/remove:g:专门用来移除给用户/组已授予的权限(若需移除拒绝权限则用/remove:d)(W,M):明确指定要移除的写入(Write)和修改(Modify)权限/T:递归处理该路径下的所有子目录和文件(不需要递归可删除此参数)/C:遇到错误时继续执行,不会因单个文件/目录的权限问题中断整个操作
额外提醒
- 必须以管理员身份运行PowerShell,否则没有修改磁盘根目录权限的权限
- 如果目标权限是从父目录继承来的,需先将继承权限转为直接分配的权限,再执行移除命令:
icacls $drive.Root /inheritance:d /C
内容的提问来源于stack exchange,提问作者snehasish nandy
相关产品推荐
相关产品推荐

