Windows 使用脚本提高权限以及设置环境变量

2024年2月26日  Tools  l101782 minutes

Windows 使用脚本提高权限以及设置环境变量,解决域控安全策略限制下的文件修改和环境变量配置问题

背景:公司 Windows 办公机受域控安全策略限制,部分文件无权直接修改,另外开发常用的设置系统环境变量也变灰无法设置。

域控环境下,IT 管理员通过 Group Policy 集中管理权限,用户默认只有标准权限,Administrators 组的权限也被策略收紧。以下方案通过命令行绕过 GUI 限制,实际上仍在管理员权限框架内操作——前提是你的域账号在本地 Administrators 组中。

提升文件权限

  1. 点击 Windows + X 快捷键 – 选择「命令提示符(管理员)」或「Windows Terminal (Admin)」。

  2. 在 CMD 窗口中执行 takeown 获取文件所有权。

    takeown /f C:\要修复的文件路径
  3. 在拿到文件所有权后,使用 icacls 获取文件的完全控制权限。

    icacls C:\要修复的文件路径 /Grant Administrators:F

对目录递归操作

需要对整个目录(如 C:\Program Files\SomeApp\)及其所有子文件/子目录提权时:

# 递归获取所有权
takeown /f "C:\目标目录" /r /d y

# 递归授予 Administrators 完全控制
icacls "C:\目标目录" /Grant Administrators:F /t

# 恢复为 TrustedInstaller 所有(系统默认状态)
icacls "C:\目标目录" /SetOwner "NT SERVICE\TrustedInstaller" /t

参数说明:

  • /r — 递归,对目录下所有子项执行操作
  • /d y — 对提示自动回答 Yes
  • /t — 递归(icacls 的等价参数)

常见需要提权的场景

场景涉及路径
修改 hosts 文件C:\Windows\System32\drivers\etc\hosts
修改 IDE 安装目录下的配置文件C:\Program Files\JetBrains\*\bin\*.vmoptions
替换系统 DLL(不推荐)C:\Windows\System32\
修改 Windows 服务对应的可执行文件对应服务的 binPath

注册表权限修复

域控常限制注册表编辑器的修改权限。如果确认需要修改某个注册表项的权限,先获取该键的所有权:

# 获取指定注册表键的所有权
regini -m "HKEY_LOCAL_MACHINE\SOFTWARE\YourApp" Administrators

# 或者使用 PowerShell
powershell -Command "$key='HKLM:\SOFTWARE\YourApp'; $acl=Get-Acl $key; $acl.SetOwner([System.Security.Principal.NTAccount]'Administrators'); Set-Acl $key $acl"

之后即可在 regedit 中手动调整该键的 ACL。

Windows 服务权限修改

域控可能禁止修改某些 Windows 服务。通过 sc 命令可查看和修改服务的 ACL:

# 查看服务当前权限(SDDL 格式)
sc sdshow 服务名

# 授予 Administrators 组对服务的完全控制
sc sdset 服务名 "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"

SDDL 字符串解读(关键 ACE 部分):

  • SY = Local System,BA = Built-in Administrators
  • CCLCSWRPWPDTLOCRRC 等 = 各类权限标志的组合

修改后可能需要重启服务或重启机器使变更生效。

命令行设置环境变量

Windows 下命令行设置环境变量,方式为 setx 变量名 变量值,变量值带空格等特殊符号的,用引号引起来。

# 通过命令行设置 Java Home
setx JAVA_HOME "C:\Program Files\Java\jdk-11.0.2"
# 设置 GO Path
setx GOPATH "D:\workspace\go"

注意事项:

  • setx 默认写入用户环境变量(HKCU),使用 /M 参数写入系统环境变量(HKLM,需管理员权限)。
  • setx 不会影响当前 CMD/PowerShell 窗口,需新开窗口或重启应用后生效。
  • setx 截断超过 1024 字符的值。如果 PATH 过长,用 reg add 代替。
# 系统级环境变量(需管理员权限)
setx JAVA_HOME "C:\Program Files\Java\jdk-11.0.2" /M

# 追加到 PATH(注意 %PATH% 只在当前窗口有效,setx 取的是当前值)
setx PATH "%PATH%;C:\new\tools"

# 安全的 PATH 追加方式(避免重复)
reg query "HKCU\Environment" /v PATH
reg add "HKCU\Environment" /v PATH /t REG_EXPAND_SZ /d "%PATH%;C:\new\tools" /f