PowerShell如何移除系统文件含ALL APPLICATION PACKAGES的所有权限
移除System32文件全部权限的PowerShell解决方案
风险提示
警告:修改System32目录下的系统文件权限会导致Windows核心功能异常,包括但不限于Windows更新失效、系统组件崩溃、安全补丁无法安装,严重时会引发系统无法启动。操作前请确认必要性,提前做好系统备份。
问题原因
原脚本无法移除ALL APPLICATION PACKAGES、ALL RESTRICTED APPLICATION PACKAGES两个主体的权限,核心原因是这两个身份的权限默认从System32父目录继承而来,未禁用继承的情况下直接清除规则不会生效。
完整实现脚本
# 请以管理员身份运行此脚本 # 定义需要处理的文件列表 $targetFiles = @( "C:\Windows\System32\wuauclt.exe", "C:\Windows\System32\wuaueng.dll" ) foreach ($file in $targetFiles) { # 跳过不存在的文件 if (-not (Test-Path $file -PathType Leaf)) { Write-Warning "文件不存在:$file" continue } # 第一步:获取文件所有权,/a参数将所有权分配给管理员组 takeown /F $file /A | Out-Null # 第二步:获取文件当前ACL配置 $acl = Get-Acl -Path $file # 第三步:禁用权限继承,同时删除所有继承而来的权限(关键步骤) $acl.SetAccessRuleProtection($true, $false) # 第四步:移除所有显式定义的访问规则 foreach ($rule in $acl.Access) { $acl.RemoveAccessRuleAll($rule) } # 第五步:将修改后的ACL应用到文件 Set-Acl -Path $file -AclObject $acl Write-Host "已处理文件权限:$file" }
注意事项
- 必须以管理员身份启动PowerShell执行脚本,否则无权限修改系统文件属性
- 64位系统下请使用64位PowerShell运行,若使用32位PowerShell,需要将路径中的
System32替换为SysNative,避免系统自动重定向到SysWOW64目录 - 若文件被系统进程/服务占用,会出现修改失败提示,可先终止对应进程(例如处理Windows更新相关文件时,先执行
Stop-Service wuauserv -Force停止更新服务)后再运行脚本
内容的提问来源于stack exchange,提问作者tar
相关产品推荐
相关产品推荐

