4

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

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

powershell -ExecutionPolicy ByPass -File script.ps1

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

script.ps1

有谁知道正确的参数给詹金斯“Powershell插件”以成功运行脚本?否则,我将只使用批处理脚本解决方法。

4

3 回答 3

3

正确的做法是在您的机器上设置一个执行策略(一次性操作),此时您不需要每次都绕过它,并且 Jenkins 插件应该“正常工作”。你不能吗?

一个合理的起始设置是 RemoteSigned,这将允许您正常执行本地脚本,但仍不允许从 Internet 下载脚本。

在提升的 PowerShell 提示符下,您将运行:

Set-ExecutionPolicy RemoteSigned

另请参阅:http ://technet.microsoft.com/library/hh849812.aspx

更新:关于应用政策及其行为方式的帮助摘录:

如果您为本地计算机(默认)或当前用户设置执行策略,则更改将保存在注册表中并保持有效,直到您再次更改为止。

当然,如果您的机器在域上,那么组策略可以恢复这一点。

于 2013-08-09T00:41:36.737 回答
3

对于防重启解决方案,请放置此单行

powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force

在所有用户启动文件夹中的批处理文件中,在 Windows 7 上是C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

(或者您可以通过单击Start -> All Programs到达那里,右键单击Startup并单击Open All Users

这就是我让 Jenkins 在受组策略约束的域机器上执行 PS 脚本的方式,而无需涉及系统管理员;-)

于 2013-11-22T13:19:40.590 回答
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
于 2013-08-09T15:52:54.023 回答