Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins powershell插件正在运行32位powershell,我需要64位_Powershell_Jenkins - Fatal编程技术网

Jenkins powershell插件正在运行32位powershell,我需要64位

Jenkins powershell插件正在运行32位powershell,我需要64位,powershell,jenkins,Powershell,Jenkins,我对Jenkins中的powershell集成非常陌生,我的脚本不会运行,因为(我相信)我需要在64位中执行powershell。运行: [Environment]::Is64BitProcess 在我的执行序列中,会产生false错误,然后我使用的cmdlet(Get-WindowsFeature)会显示为无法识别为cmdlet,等等。是否有执行64位powershell脚本的方法? 谢谢 我对詹金斯不熟悉,但它本身似乎是一个32位进程 能否指定PowerShell可执行文件的位置?如果是,

我对Jenkins中的powershell集成非常陌生,我的脚本不会运行,因为(我相信)我需要在64位中执行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位操作系统上引用real
System32
,可以使用
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位操作系统上引用real
System32
,可以使用
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>