为什么我不能让Jenkins“Powershell插件”工作?
我可以使用“执行Windows批处理命令”构建步骤使用以下命令在Jenkins上运行powershell脚本:
powershell -ExecutionPolicy ByPass -File script.ps1
但我无法使用“Windows Powershell”构建步骤和此命令运行带有Jenkins“Powershell插件”的powershell脚本,因为Windows执行策略没有设置错误而不允许它运行:
script.ps1
有没有人知道正确的arg给Jenkins“Powershell Plugin”成功运行脚本?否则,我将使用批处理脚本解决方法。
答案 0 :(得分:3)
正确的做法是在您的计算机上设置执行策略(一次性操作),此时您不需要每次都绕过它,并且Jenkins插件应该“正常工作”。你不能吗?
合理的启动设置将是RemoteSigned,这将允许您正确执行本地脚本,但仍然会禁止从Internet下载的脚本。
在提升的PowerShell提示符下,您将运行:
Set-ExecutionPolicy RemoteSigned
另请参阅:http://technet.microsoft.com/library/hh849812.aspx
更新:摘自应用政策的帮助及其应如何表现:
如果您为本地计算机设置执行策略(默认值) 或者当前用户,更改将保存在注册表中并保留 有效,直到你再次改变它。
当然,如果您的计算机位于域上,则组策略可以还原此。
答案 1 :(得分:3)
对于防重启的解决方案,请将此单行
powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
在所有用户启动文件夹中的批处理文件中,该文件夹在Windows 7上为C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
(或者您可以点击开始 - > 所有程序,右键单击启动,然后点击全部打开用户)
这就是我让詹金斯在受组策略约束的域机器上执行PS脚本的方式,而不必涉及系统管理员; - )
答案 2 :(得分:2)
经过实验,我意识到由于Jenkins作为系统用户的服务运行,因此powershell范围与我的终端服务登录会话使用的范围不同。
此脚本适用于我,似乎正确设置了注册表项,以便在重新启动和新登录时该设置保持不变。
# SetExecutionPolicyToRemoteSigned.ps1
# Need to run this after every server reboot.
Write-Output "Setting local Powershell policy to RemoteSigned"
Write-Output ""
Set-ExecutionPolicy -scope CurrentUser Undefined -Force
#Set-ExecutionPolicy -scope Process Undefined -Force
Set-ExecutionPolicy -scope LocalMachine Undefined -Force
Set-ExecutionPolicy -scope CurrentUser RemoteSigned -Force
#Set-ExecutionPolicy -scope Process RemoteSigned -Force
Set-ExecutionPolicy -scope LocalMachine RemoteSigned -Force
Write-Output "Finished."
Get-ExecutionPolicy -list
Start-Sleep -s 10