현재 PowerShell 프로세스가 32비트인지 64비트인지를 확인합니다.
x64비트 OS 플랫폼에서 PowerShell 스크립트를 실행하는 경우 스크립트에서 스크립트가 실행되고 있는 PowerShell(32비트 또는 64비트)의 버전을 확인하려면 어떻게 해야 합니까?
배경
32비트 및 64비트 버전의 PowerShell은 기본적으로 Windows Server 2008과 같은 64비트 플랫폼에 설치됩니다.이로 인해 특정 아키텍처를 대상으로 하는 PowerShell 스크립트를 실행할 때 문제가 발생할 수 있습니다(64비트 라이브러리를 사용하기 위해 SharePoint 2010용 스크립트에 64비트를 사용하는 경우).
관련 질문:
- Powershell의 x64와 x86의 가변성에 대해 프로그래밍하는 가장 좋은 방법은 무엇입니까?이 질문에서는 32비트 아키텍처와 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.exe
64비트 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
또한 돌아올 것이다True
ARM64에서 실행되는 Windows에서 실행 중인지 아닌지가 확인되면 신뢰할 수 없습니다.AMD64
Windows 에서는, 다음의 환경 변수를 사용할 수 있습니다.
$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
'programing' 카테고리의 다른 글
Initialize Component()는 무엇을 하며 WPF에서는 어떻게 동작합니까? (0) | 2023.04.15 |
---|---|
목록의 값을 Excel로 내보내기 (0) | 2023.04.15 |
로컬에서 일부 파일을 무시하도록 git을 설정하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
셸 명령이 완료될 때까지 기다립니다. (0) | 2023.04.10 |
C#에서는 문자열을 사용해야 합니까?[ Empty ]또는 [String]입니다.문자열을 초기화하려면 비워두시겠습니까? 아니면 " "? (0) | 2023.04.10 |