为什么可以';我不能让Jenkins Powershell插件工作吗?

为什么可以';我不能让Jenkins Powershell插件工作吗?,powershell,jenkins,powershell-2.0,jenkins-plugins,Powershell,Jenkins,Powershell 2.0,Jenkins Plugins,为什么我不能让詹金斯的“Powershell插件”工作 我可以使用“执行windows批处理命令”生成步骤和以下命令在Jenkins上运行powershell脚本: powershell -ExecutionPolicy ByPass -File script.ps1 但我无法使用“Windows powershell”生成步骤和此命令运行带有Jenkins“powershell插件”的powershell脚本,因为Windows执行策略未设置错误禁止其运行: script.ps1 有人知道

为什么我不能让詹金斯的“Powershell插件”工作

我可以使用“执行windows批处理命令”生成步骤和以下命令在Jenkins上运行powershell脚本:

powershell -ExecutionPolicy ByPass -File script.ps1
但我无法使用“Windows powershell”生成步骤和此命令运行带有Jenkins“powershell插件”的powershell脚本,因为Windows执行策略未设置错误禁止其运行:

script.ps1

有人知道给Jenkins“Powershell插件”合适的参数,以便它成功运行脚本吗?否则,我将使用批处理脚本解决问题。

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

一个合理的起始设置是RemoteSigned,它允许您很好地执行本地脚本,但仍然不允许从internet下载脚本

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

Set-ExecutionPolicy RemoteSigned
另见:

更新:摘自有关应用策略及其行为的帮助:

如果为本地计算机设置执行策略(默认值) 或当前用户,更改保存在注册表中并保留 在您再次更改之前有效


当然,如果您的计算机位于域上,则组策略可以将其还原。

经过实验后,我意识到由于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

要获得防重启的解决方案,请将这一行

powershell集执行策略-作用域CurrentUser RemoteSigned-Force

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

(也可以通过单击开始->所有程序,右键单击启动,然后单击打开所有用户)到达该位置


这就是我让Jenkins根据组策略在域计算机上执行PS脚本的方式,而不必让系统管理员参与;-)

我试过了,但似乎粘不住。当你这样做的时候,它应该是全球性和永久性的吗?如果是这样的话,我从来没有注意到。它是永久的,但从你发现的情况来看,它有特定于默认用户的作用域。你的Jenkins box在域上吗?可能是因为组策略正在定义一个特定的ExecutionPolicy,所以它没有坚持下去。您可能是对的。我有两个域,它们在不同的域上,它们似乎表现出不同的行为。我需要更仔细地检查。谢谢你的提醒。我相信你是对的,它通常是持久的。对于域管理员来说,在组策略中为您的生成计算机请求RemoteSigned ExecutionPolicy应该是一个非常合理的请求。或者,您可以变得聪明,尝试以某种方式为“系统”用户的“用户”范围设置executionPolicy…谢谢,这是一个好主意,但我标记为已接受的答案对我来说一直有效,而不必执行启动脚本。