programing

현재 PowerShell 프로세스가 32비트인지 64비트인지를 확인합니다.

javamemo 2023. 4. 15. 08:11
반응형

현재 PowerShell 프로세스가 32비트인지 64비트인지를 확인합니다.

x64비트 OS 플랫폼에서 PowerShell 스크립트를 실행하는 경우 스크립트에서 스크립트가 실행되고 있는 PowerShell(32비트 또는 64비트)의 버전을 확인하려면 어떻게 해야 합니까?

배경
32비트 및 64비트 버전의 PowerShell은 기본적으로 Windows Server 2008과 같은 64비트 플랫폼에 설치됩니다.이로 인해 특정 아키텍처를 대상으로 하는 PowerShell 스크립트를 실행할 때 문제가 발생할 수 있습니다(64비트 라이브러리를 사용하기 위해 SharePoint 2010용 스크립트에 64비트를 사용하는 경우).

관련 질문:

셸이 에서 실행되고 있는 경우.NET 4.0(PowerShell 3.0):

PS> [Environment]::Is64BitProcess
True

사용 중인 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
}

위의 기능은 시스템의 크기가 크다는 사실을 활용합니다.IntPtr은 플랫폼 고유합니다.32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트입니다.

32비트 및 64비트 버전의 Powershell은 위치가 다소 오해의 소지가 있습니다.32비트 PowerShell은 다음 사이트에서 구할 수 있습니다.C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe64비트 PowerShell은 다음 위치에 있습니다.C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe, 이 기사의 제공.

이것도 쓸 수 있어요.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는 실행 중인 프로세스에 관계없이 항상 현재 프로세스의 환경을 반환합니다.

Windows 자체(및 PowerShell)가 ARM64와 같은 더 많은 아키텍처에서 지원되므로 애플리케이션이 64비트인지 확인하는 것만으로는 충분하지 않을 수 있습니다.

[Environment]::Is64BitProcess또한 돌아올 것이다TrueARM64에서 실행되는 Windows에서 실행 중인지 아닌지가 확인되면 신뢰할 수 없습니다.AMD64Windows 에서는, 다음의 환경 변수를 사용할 수 있습니다.

$Env:PROCESSOR_ARCHITECTURE 하다, 하다, 하다, 하다와 같은 을 반환합니다AMD64,Arm64 , 「」x86.

Switch([IntPtr]::size * 8) {

32 { <#your 32 bit stuff#> ;break }

64 { <#your 64 bit stuff#> ;break }

}

언급URL : https://stackoverflow.com/questions/8588960/determine-if-current-powershell-process-is-32-bit-or-64-bit

반응형