Question:
I’m trying to run PowerShell scripts from Jenkins, but it seems to completely ignore the execution policy! This happens either by executing powershell.exe directly, or using the PowerShell plugin
Additional information:
Jenkins is running as a Windows Service (using the Local System account, non-interactive). Connecting to that server, and checking execution policy is indeed RemoteSigned
:
1 2 3 4 5 6 7 |
PS C:\> whoami nt authority\system PS C:\> Get-ExecutionPolicy RemoteSigned PS C:\> |
However, when running a Jenkins build, this is not the case. Here’s the output of executing Get-ExecutionPolicy -List
inside a build step:
1 2 3 4 5 6 7 8 9 |
d:\workspace\test-job>powershell Get-ExecutionPolicy -list Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined |
I also tried setting it explicitly from the build step, nothing.
What am I missing?
Answer:
After more than two hours of pulling my hair, the problem was x86/x64!!!
Turns out, Set-ExecutionPolicy
of x64 (default) PowerShell has no effect on the x86 settings!
Jenkins is a 32-bit process, running from a Windows service – it executes the x86 PowerShell!
In addition, the Modules directory for x86 PowerShell is located under %systemroot%\SysWow64\WindowsPowerShell\1.0\Modules
, another important fact to remember!