Jenkins powershell插件正在运行32位powershell,我需要64位
我对Jenkins中的powershell集成非常陌生,我的脚本不会运行,因为(我相信)我需要在64位中执行powershell。运行:Jenkins powershell插件正在运行32位powershell,我需要64位,powershell,jenkins,Powershell,Jenkins,我对Jenkins中的powershell集成非常陌生,我的脚本不会运行,因为(我相信)我需要在64位中执行powershell。运行: [Environment]::Is64BitProcess 在我的执行序列中,会产生false错误,然后我使用的cmdlet(Get-WindowsFeature)会显示为无法识别为cmdlet,等等。是否有执行64位powershell脚本的方法? 谢谢 我对詹金斯不熟悉,但它本身似乎是一个32位进程 能否指定PowerShell可执行文件的位置?如果是,
[Environment]::Is64BitProcess
在我的执行序列中,会产生false
错误,然后我使用的cmdlet(Get-WindowsFeature
)会显示为无法识别为cmdlet,等等。是否有执行64位powershell脚本的方法?
谢谢 我对詹金斯不熟悉,但它本身似乎是一个32位进程 能否指定PowerShell可执行文件的位置?如果是,请尝试使用以下路径:
C:\Windows\SysNative\WindowsPowerShell\v1.0\powershell.exe
如果您不能这样做,那么您可以使用Invoke命令
在“执行序列”中的代码中这样做:
Invoke命令-ComputerName-脚本块{[Environment]::Is64BitProcess}
scriptblock中的所有代码将在单独的64位进程中运行,结果将被序列化并返回
解释
路径
在32位Windows操作系统上,系统文件夹是C:\Windows\System32
。
在64位Windows操作系统上,64位系统文件夹也是C:\Windows\System32
。但64位Windows安装上32位进程的系统文件夹实际上是C:\Windows\SysWOW64
为了兼容性,64位操作系统上的32位进程将对C:\Windows\System32
的任何调用透明地重定向到C:\Windows\SysWOW64
,而不知道该进程
要使32位进程能够在64位操作系统上引用realSystem32
,可以使用C:\Windows\SysNative
由于PowerShell有32位和64位版本,并且它位于系统文件夹中,因此您需要使用上述规则来引用正确的可执行文件,具体取决于您是从64位还是32位进程调用它
典型的场景(您想调用相同比特数的版本)是最简单的(只需调用powershell.exe
或通过System32
引用它),但如果您想引用其他版本,它会变得毛茸茸的
调用命令
方法
Invoke命令
cmdlet允许您运行代码,通常在另一台计算机上运行,但也可以在同一台计算机上运行。这将产生一个完全独立的进程,任何输出都将被序列化并发送回调用进程
此方法需要注意的是,您必须通过启用PSRemoting
或(无耻自插)在计算机上启用PowerShell远程处理
您在64位计算机上连接到的默认配置文件(Microsoft.PowerShell
)将是64位版本的PowerShell,无论调用方的操作系统如何
顺便说一句,如果您想使用
Invoke命令
连接到32位版本,可以通过显式指定配置文件Microsoft.PowerShell32来实现,我对Jenkins不太熟悉,但它本身似乎是一个32位进程
能否指定PowerShell可执行文件的位置?如果是,请尝试使用以下路径:
C:\Windows\SysNative\WindowsPowerShell\v1.0\powershell.exe
如果您不能这样做,那么您可以使用Invoke命令
在“执行序列”中的代码中这样做:
Invoke命令-ComputerName-脚本块{[Environment]::Is64BitProcess}
scriptblock中的所有代码将在单独的64位进程中运行,结果将被序列化并返回
解释
路径
在32位Windows操作系统上,系统文件夹是C:\Windows\System32
。
在64位Windows操作系统上,64位系统文件夹也是C:\Windows\System32
。但64位Windows安装上32位进程的系统文件夹实际上是C:\Windows\SysWOW64
为了兼容性,64位操作系统上的32位进程将对C:\Windows\System32
的任何调用透明地重定向到C:\Windows\SysWOW64
,而不知道该进程
要使32位进程能够在64位操作系统上引用realSystem32
,可以使用C:\Windows\SysNative
由于PowerShell有32位和64位版本,并且它位于系统文件夹中,因此您需要使用上述规则来引用正确的可执行文件,具体取决于您是从64位还是32位进程调用它
典型的场景(您想调用相同比特数的版本)是最简单的(只需调用powershell.exe
或通过System32
引用它),但如果您想引用其他版本,它会变得毛茸茸的
调用命令
方法
Invoke命令
cmdlet允许您运行代码,通常在另一台计算机上运行,但也可以在同一台计算机上运行。这将产生一个完全独立的进程,任何输出都将被序列化并发送回调用进程
此方法需要注意的是,您必须通过启用PSRemoting
或(无耻自插)在计算机上启用PowerShell远程处理
您在64位计算机上连接到的默认配置文件(Microsoft.PowerShell
)将是64位版本的PowerShell,无论调用方的操作系统如何
顺便说一句,如果您想使用
Invoke命令
连接到32位版本,您可以通过显式指定配置文件Microsoft.PowerShell32来实现,因此答案非常简单,但同时又令人恼火。基本上,模块在两个Powershell路径(x86和x64)中都不存在,因此将模块复制到32位Powershell环境中解决了这个问题。好的,所以答案非常简单,但同时又令人恼火。基本上,模块不存在于两个Powershell路径(x86和
$env:Path # Path will have the right Powershell available
[intptr]::size # outputs: 4 = 32-bit, 8 = 64-bit
Stop-WebAppPool FOOBAR # fails when 32-bit, succeeds when 64-bit
[Powershell Test] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Windows\TEMP\hudson123456789.ps1'"
C:\Windows\system32;C:\Windows;C:\Windows\System32\WindowsPowerShell\v1.0\
4
Stop-WebAppPool : Retrieving the COM class factory for component with CLSID
{688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error:
80040154 Class not registered (Exception from HRESULT: 0x80040154
(REGDB_E_CLASSNOTREG)).
At C:\Windows\TEMP\hudson123456789.ps1:7 char:1
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
choco install -y javaruntime
choco install -y jre8
<executable>%BASE%\jre\bin\java</executable>
<executable>C:\Program Files\Java\jre1.8.0_66\bin\java</executable>
<executable>C:\ProgramData\Oracle\Java\javapath\java.exe</executable>