Mag*_*ndi 78 powershell scripting 64-bit 32-bit
在x64位OS平台上运行PowerShell脚本时,如何在脚本中确定脚本运行的PowerShell(32位或64位)版本?
背景
默认情况下,32位和64位版本的PowerShell都安装在64位平台(如Windows Server 2008)上.这可能会导致运行必须针对特定体系结构的PowerShell脚本时遇到困难(即使用64-用于SharePoint 2010脚本的位,以便使用64位库).
相关问题:
Sha*_*evy 134
如果你的shell运行在.NET 4.0(PowerShell 3.0)上:
PS> [Environment]::Is64BitProcess
True
Run Code Online (Sandbox Code Playgroud)
Mag*_*ndi 82
要在脚本中确定您正在使用的PowerShell版本,可以使用以下帮助程序函数(由JaredPar 对相关问题的答案提供):
# 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
}
Run Code Online (Sandbox Code Playgroud)
上述函数利用了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
,这礼貌文章.
Tre*_*van 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';
}
Run Code Online (Sandbox Code Playgroud)
$Arch
将是x86
或的值amd64
.
这样做很酷的一点是,除了本地one($PID
)之外,您还可以指定不同的进程ID ,以确定不同PowerShell进程的体系结构.
归档时间: |
|
查看次数: |
61531 次 |
最近记录: |