为什么我不能让Jenkins Powershell插件工作?

时间:2013-08-08 23:58:13

标签: powershell jenkins powershell-v2.0 jenkins-plugins

为什么我不能让Jenkins“Powershell插件”工作?

我可以使用“执行Windows批处理命令”构建步骤使用以下命令在Jenkins上运行powershell脚本:

powershell -ExecutionPolicy ByPass -File script.ps1

但我无法使用“Windows Powershell”构建步骤和此命令运行带有Jenkins“Powershell插件”的powershell脚本,因为Windows执行策略没有设置错误而不允许它运行:

script.ps1

有没有人知道正确的arg给Jenkins“Powershell Plugin”成功运行脚本?否则,我将使用批处理脚本解决方法。

3 个答案:

答案 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