You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过Jenkins以管理员模式运行PowerShell命令及.ps1脚本

我之前也踩过这个坑——Jenkins默认的运行权限不够,导致需要管理员权限的PowerShell脚本怎么跑都不生效。下面几个亲测有效的方案,你可以按需尝试:

方法1:修改Jenkins服务的运行权限

Jenkins默认通常用本地系统账户或者低权限账户运行,直接把服务的登录账户改成管理员就能从根源解决问题:

  • 按下Win+R输入services.msc打开「服务」面板
  • 找到Jenkins服务,右键选择「属性」→切换到「登录」选项卡
  • 勾选「此账户」,输入本地管理员的用户名和密码,点击确定后重启Jenkins服务
  • 之后Jenkins执行的所有命令都会继承这个管理员权限,你的.ps1脚本自然就能正常运行了

方法2:用Start-Process强制提权运行脚本

如果不想改动Jenkins全局服务权限,只想给单个脚本提权,可以在Jenkins的「执行Windows批处理命令」或「执行PowerShell」步骤里用这个命令:

Start-Process powershell.exe -ArgumentList "-ExecutionPolicy Bypass -File 'C:\绝对路径\你的脚本.ps1'" -Verb RunAs -Wait -NoNewWindow

关键参数说明:

  • -Verb RunAs:强制以管理员身份启动PowerShell进程
  • -Wait:等待脚本执行完毕再继续Jenkins后续步骤
  • -NoNewWindow:避免弹出新窗口(Jenkins后台运行时看不到弹窗,必须加这个)
  • -ExecutionPolicy Bypass:跳过PowerShell的执行策略限制,确保脚本能正常启动

⚠️ 注意:如果Jenkins服务本身是低权限账户,这个命令可能会触发UAC弹窗,但Jenkins后台运行时看不到弹窗,导致脚本卡住,这时候方法1会更稳定。

方法3:通过PowerShell插件结合.NET Process类提权

如果你用Jenkins的「PowerShell Plugin」来执行脚本,可以用.NET的Process类实现更灵活的提权:

  • 先安装Jenkins的「PowerShell Plugin」
  • 在构建步骤里选择「Execute PowerShell」,然后输入以下代码:
$scriptPath = "C:\绝对路径\你的脚本.ps1"
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "powershell.exe"
$processInfo.Arguments = "-ExecutionPolicy Bypass -File `"$scriptPath`""
$processInfo.Verb = "RunAs"
$processInfo.WindowStyle = "Hidden" # 隐藏窗口
$process = [System.Diagnostics.Process]::Start($processInfo)
$process.WaitForExit() # 等待执行完成

这个方法和方法2原理一致,但用.NET API实现,适配性更强。

方法4:创建Windows计划任务,让Jenkins触发它

如果上面的方法都不适用,可以绕个弯用计划任务:

  • 打开「任务计划程序」,创建一个新任务,设置「不管用户是否登录都要运行」,并在「安全选项」里勾选「使用最高权限运行」
  • 在任务的操作里添加启动PowerShell并执行你的脚本
  • 最后在Jenkins里用命令触发这个任务:
schtasks /run /tn "你的任务名称"

这种方式的好处是计划任务的权限独立配置,完全不受Jenkins自身权限的限制,适合需要极高权限的操作场景。

额外提醒

  • 不管用哪种方法,都要确保管理员账户能访问Jenkins的工作目录和你的.ps1脚本路径,避免权限不足
  • 先在本地用管理员身份手动运行脚本,确认脚本本身没有问题,再放到Jenkins里测试

内容的提问来源于stack exchange,提问作者Krishna Prasad S

火山引擎 最新活动