如何让PowerShell脚本自动以管理员权限运行
如何让PowerShell脚本自动以管理员权限运行
我懂你这种痛点——写好的PowerShell脚本改注册表、调电源计划,必须用管理员权限,但每次手动开 elevated 终端太麻烦,之前试的方法还没搞定对吧?给你几个实用的解决方案:
方法一:让脚本自动检测并提权(最推荐)
直接在你的脚本开头加一段权限检查代码,脚本运行时会自动判断是否有管理员权限,没有的话就弹窗请求提权,非常省心。
把这段代码放在你所有业务代码的最前面:
# 检查当前PowerShell进程是否拥有管理员权限 $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) if (-not $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { # 以管理员身份重新启动当前脚本 Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs exit } # 下面是你原本的测试代码,提权后才会执行 powercfg /setactive ab6534a3-bc02-4c44-94d1-a8535b2eb070 Set-ItemProperty -Path "HKLM:\SOFTWARE\Samsung\SamsungSettings\ModulePerformance" -Name "value" -Value "2"
原理很简单:先验证当前进程的权限,要是没管理员权限,就用Start-Process加-Verb RunAs参数重启脚本,UAC确认后就会在 elevated 环境下执行所有命令了。
方法二:修复右键“以管理员身份运行”选项
你之前尝试添加这个右键选项没成功,可能是注册表操作的步骤有误,手动来一遍肯定能成:
- 按
Win+R输入regedit打开注册表编辑器 - 定位到路径
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell - 右键点击
Shell项,选择「新建」→「项」,把新项命名为RunAs - 选中刚创建的
RunAs项,在右侧窗口双击(默认),把数值数据改成「以管理员身份运行」 - 接着在
RunAs项下面再新建一个子项,命名为Command - 选中
Command项,右侧双击(默认),填入数值数据:powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%1" - 关闭注册表编辑器,现在右键PS1文件就能看到「以管理员身份运行」的选项,点击后就会启动带管理员权限的终端执行脚本
方法三:创建带管理员权限的快捷方式
如果不想改脚本也不想碰注册表,给脚本做个快捷方式就行:
- 右键你的PS1脚本,选择「创建快捷方式」
- 右键这个新的快捷方式,打开「属性」
- 切换到「快捷方式」标签页,点击「高级」按钮
- 勾选「以管理员身份运行」,然后依次点击「确定」保存设置
- 以后双击这个快捷方式,就会自动弹出UAC请求,确认后就能以管理员权限执行脚本了
备注:内容来源于stack exchange,提问作者Augusto Barbosa




