2011-12-21 187 views
64

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

背景
两者的PowerShell的32位和64位版本默认情况下,在64位平台上安装,如Windows Server 2008中这可能导致困难的时候PowerShell脚本是必须目标RAN一个特定的架构(即使用64位的SharePoint 2010脚本,以便使用64位库)。

相关问题:

回答

106

如果你外壳上的.NET 4.0(PowerShell的3.0)运行:

PS> [Environment]::Is64BitProcess 
True 
+0

谢谢你分享一个非常有用的代码片段。 +1不幸的是,我在PowerShell v2上运行,但我很高兴接受这个答案。 – MagicAndi 2011-12-21 14:11:29

+4

感谢您接受这个答案,但您应该将其交给@MagicAndi,他的答案无论版本如何。 – 2011-12-21 14:36:00

73

要确定你的脚本你使用的是什么版本的PowerShell的,你可以使用下面的辅助功能(的JaredPar'sanswer礼貌的相关问题):

# 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

+1

这是惊人的帮助做得好。 – 2012-05-03 16:30:53

+0

基于这个答案我发现,为了使用字符串中的值最有用的方法是:'[IntPtr] :: size * 8'。这将乘以8的大小给你32/64取决于体系结构,例如:'“$([IntPtr] :: size * 8)位”' – Sebastian 2017-04-12 20:38:31

13

您可以使用这一点。我在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($PID)之外,您还可以指定不同的进程ID来确定不同PowerShell进程的体系结构。

+0

非常感谢。上面的脚本帮助我解决了这个问题:) – 2014-12-19 13:22:21

+3

'Process.StartInfo.EnvironmentVariables'总是返回当前进程的环境,无论你在哪个进程上执行它。如果你想访问当前的环境,只需使用'$ env:PROCESSOR_ARCHITECTURE' - 这是PowerShell 1.0 up AFAIK。当然2.0。你可以用'ls env:'列出环境。 – 2015-03-30 04:34:42

+0

$ Is64bit = $ env:PROCESSOR_ARCHITECTURE -eq'AMD64' – 2016-10-24 19:21:37