scripting powershell 64bit 32-bit

scripting - Determine si el proceso actual de PowerShell es de 32 bits o de 64 bits.



64bit 32-bit (3)

Para determinar en su secuencia de comandos qué versión de PowerShell está utilizando, puede usar las siguientes funciones de ayuda (cortesía de JaredPar''s answer de JaredPar''s a una pregunta relacionada):

# 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 }

Las funciones anteriores hacen uso del hecho de que el tamaño de System.IntPtr es específico de la plataforma. Es 4 bytes en una máquina de 32 bits y 8 bytes en una máquina de 64 bits.

Tenga en cuenta que vale la pena señalar que las ubicaciones de las versiones de 32 bits y 64 bits de Powershell son algo engañosas. El PowerShell de 32 bits se encuentra en C:/Windows/SysWOW64/WindowsPowerShell/v1.0/powershell.exe , y el PowerShell de 64 bits está en C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe . cortesía de este article .

Al ejecutar un script de PowerShell en una plataforma de sistema operativo x64-bit, ¿cómo puede determinar en el script qué versión de PowerShell (32 bits o 64 bits) ejecuta el script?

Fondo
Ambas versiones de 32 bits y 64 bits de PowerShell están instaladas por defecto en una plataforma de 64 bits como Windows Server 2008. Esto puede provocar dificultades cuando se ejecuta un script de PowerShell que debe estar dirigido a una arquitectura específica (es decir, utilizando 64 bits para un script para SharePoint 2010, para consumir las bibliotecas de 64 bits).

Pregunta relacionada:


Puedes usar esto también. Lo probé en PowerShell versión 2.0 y 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''; }

El valor de $Arch será x86 o amd64 .

Lo bueno de hacerlo de esta manera es que también puede especificar un ID de proceso diferente, además del local ( $PID ), para determinar la arquitectura de un proceso de PowerShell diferente.


Si su shell se ejecuta en .NET 4.0 (PowerShell 3.0):

PS> [Environment]::Is64BitProcess True