在x64位操作系统平台上运行PowerShell脚本时,如何在脚本中确定脚本运行在哪个版本的PowerShell (32位或64位)上?
背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台上。当运行必须以特定体系结构为目标的PowerShell脚本时(例如,为了使用64位库,对SharePoint 2010使用64位的脚本),这可能会导致困难。
相关问题:
发布于 2011-12-21 20:13:10
如果您的shell运行在.NET 4.0 (PowerShell 3.0)上:
PS> [Environment]::Is64BitProcess
True
发布于 2011-12-21 19:19:57
要在脚本中确定正在使用的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字节。
请注意,值得注意的是,Powershell的32位和64位版本的位置有些误导。32位PowerShell在C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
上,64位PowerShell在C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
上,感谢这个article。
发布于 2013-11-06 02:48:19
你也可以使用这个。我在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
。
编辑:
需要注意的是,Process.StartInfo.EnvironmentVariables
总是返回当前进程的环境,无论您在哪个进程上执行它。
https://stackoverflow.com/questions/8588960
复制相似问题