Określ, czy bieżący proces PowerShell jest 32-bitowy czy 64-bitowy?
Podczas uruchamiania skryptu PowerShell na platformie x64-bitowej, jak można określić w skrypcie na jakiej wersji PowerShell (32-bitowej lub 64-bitowej) skrypt jest uruchomiony?
Tło
Zarówno 32-bitowe, jak i 64-bitowe wersje PowerShell są instalowane domyślnie na platformie 64-bitowej, takiej jak Windows Server 2008. Może to prowadzić do trudności podczas uruchamiania skryptu PowerShell, który musi być ukierunkowany na konkretną architekturę (np. użycie 64-bitowego skryptu dla SharePoint 2010, w celu wykorzystania bibliotek 64-bitowych).
Podobne pytanie:
- jaki jest najlepszy sposób, aby programować przeciwko zmienności x64 w powershell vs. x86? to pytanie dotyczy kodu działającego zarówno na architekturach 32-bitowych, jak i 64-bitowych. Moje pytanie dotyczy przypadku, gdy chcesz upewnić się, że skrypt działa tylko w poprawnej wersji.
3 answers
Jeśli jesteś shell działa na. Net 4.0 (PowerShell 3.0):
PS> [Environment]::Is64BitProcess
True
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 12:13:10
Aby określić w skrypcie, jakiej wersji PowerShell używasz, możesz użyć następujących funkcji pomocniczych (dzięki uprzejmości JaredPar ' S odpowiedź na powiązane pytanie):
# 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
}
Powyższe funkcje wykorzystują fakt, że Rozmiar systemu.IntPtr jest specyficzne dla platformy. Jest to 4 bajty na maszynie 32-bitowej i 8 bajtów na maszynie 64-bitowej.
Uwaga, warto zauważyć, że lokalizacje 32-bitowych i 64-bitowych wersji Powershell są nieco mylące. 32-bitowy PowerShell znajduje się w C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
, A 64-bitowy PowerShell znajduje się w C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
, dzięki uprzejmości tego artykułu .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:39
Możesz również użyć tego. Testowałem go na PowerShell w wersji 2.0 i 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';
}
Wartość $Arch
będzie albo x86
albo amd64
.
Fajną rzeczą w robieniu tego w ten sposób jest to, że możesz również określić inny identyfikator procesu, oprócz lokalnego ($PID
), Aby określić architekturę innego procesu PowerShell.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 16:29:54