确定当前的PowerShell进程是32位还是64位?

时间:2011-12-21 11:18:05

标签: scripting powershell 64-bit 32-bit

在x64位操作系统平台上运行PowerShell脚本时,如何确定脚本中的 脚本运行的PowerShell(32位或64位)版本是什么?

背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台(如Windows Server 2008)上。这可能会导致运行必须针对特定体系结构的PowerShell脚本时遇到困难(即使用64位对于SharePoint 2010的脚本,为了使用64位库。)

相关问题:

5 个答案:

答案 0 :(得分:127)

如果你的shell运行在.NET 4.0(PowerShell 3.0)上:

PS> [Environment]::Is64BitProcess
True

答案 1 :(得分:80)

要在脚本中确定您正在使用的PowerShell版本,可以使用以下帮助程序功能(由JaredPar's answer提供相关问题):

# 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
}

上述功能利用size of System.IntPtr特定于平台的事实。它在32位机器上是4个字节,在64位机器上是8个字节。

请注意,值得注意的是,32位和64位版本的Powershell的位置有些误导。 32位PowerShell位于C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe,而64位PowerShell位于C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,由article提供。

答案 2 :(得分:14)

你也可以使用它。我在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的值可以是x86amd64

以这种方式执行此操作的一个很酷的事情是,您还可以指定不同的进程ID,除了本地进程ID($PID)之外,还可以确定不同PowerShell进程的体系结构。

答案 3 :(得分:2)

由于Windows本身(和PowerShell)现在在更多架构(例如ARM64)上受支持,因此检查应用程序是否为64位可能并不总是足够的。

[Environment]::Is64BitProcess还将在运行ARM64的Windows上返回True,因此,如果您真正需要了解的是您是否在AMD64上运行,则不能依赖它。为此,在Windows上,您可以使用以下环境变量:

$Env:PROCESSOR_ARCHITECTURE,它返回类似AMD64Arm64x86的值。

答案 4 :(得分:1)

Switch([IntPtr]::size * 8) {

32 { <#your 32 bit stuff#> ;break }

64 { <#your 64 bit stuff#> ;break }

}