确定当前的PowerShell进程是否为32
在x64位操作系统平台上运行PowerShell脚本时,如何在脚本中确定脚本运行的PowerShell版本(32位或64位)?
背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台(如Windows Server 2008)上。这可能会导致运行PowerShell脚本时遇到困难,该脚本必须针对特定体系结构(即使用64位对于SharePoint 2010的脚本,为了使用64位库)。
相关问题:
如果你的shell在.NET 4.0(PowerShell 3.0)上运行:
PS> [Environment]::Is64BitProcess
True
要在您的脚本中确定您使用的是什么版本的PowerShell,可以使用以下帮助函数(礼貌JaredPar对相关问题的回答):
# Is this a Wow64 powershell host
function Test-Wow64() {
return (Test-Win32) -and (test-path env:PROCESSOR_ARCHITEW6432)
}
# Is this a 64 bit process
function Test-Win64() {
return [IntPtr]::size -eq 8
}
# Is this a 32 bit process
function Test-Win32() {
return [IntPtr]::size -eq 4
}
上述函数利用了System.IntPtr的大小是特定于平台的事实。 它在32位机器上是4个字节,在64位机器上是8个字节。
请注意,值得注意的是,32位和64位版本的Powershell的位置有点误导。 32位PowerShell位于C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe
,而64位PowerShell位于C:WindowsSystem32WindowsPowerShellv1.0powershell.exe
,礼貌这篇文章。
你也可以使用它。 我在PowerShell版本2.0和4.0上进行了测试。
$Arch = (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"];
if ($Arch -eq 'x86') {
Write-Host -Object 'Running 32-bit PowerShell';
}
elseif ($Arch -eq 'amd64') {
Write-Host -Object 'Running 64-bit PowerShell';
}
$Arch
的值将是x86
或amd64
。
这样做很酷的事情是,除了本地( $PID
)外,您还可以指定不同的进程ID,以确定不同PowerShell进程的体系结构。