在x64位操作系统平台上运行PowerShell脚本时,如何确定脚本中的 脚本运行的PowerShell(32位或64位)版本是什么?
背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台(如Windows Server 2008)上。这可能会导致运行必须针对特定体系结构的PowerShell脚本时遇到困难(即使用64位对于SharePoint 2010的脚本,为了使用64位库。)
相关问题:
答案 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
的值可以是x86
或amd64
。
以这种方式执行此操作的一个很酷的事情是,您还可以指定不同的进程ID,除了本地进程ID($PID
)之外,还可以确定不同PowerShell进程的体系结构。
答案 3 :(得分:2)
由于Windows本身(和PowerShell)现在在更多架构(例如ARM64)上受支持,因此检查应用程序是否为64位可能并不总是足够的。
[Environment]::Is64BitProcess
还将在运行ARM64的Windows上返回True
,因此,如果您真正需要了解的是您是否在AMD64
上运行,则不能依赖它。为此,在Windows上,您可以使用以下环境变量:
$Env:PROCESSOR_ARCHITECTURE
,它返回类似AMD64
,Arm64
或x86
的值。
答案 4 :(得分:1)
Switch([IntPtr]::size * 8) {
32 { <#your 32 bit stuff#> ;break }
64 { <#your 64 bit stuff#> ;break }
}