2011-12-21 105 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

相關問題