컴퓨터에 설치된 PowerShell 버전과 실제로 설치되어 있는지 어떻게 확인할 수 있습니까?
질문자 :MagicAndi
$PSVersionTable.PSVersion
을 사용하여 엔진 버전을 확인합니다. 변수가 존재하지 않으면 엔진이 버전 1.0
이라고 가정하는 것이 안전합니다.
$Host.Version
및 (Get-Host).Version
은 신뢰할 수 없습니다. 엔진이 아닌 호스트 버전만 반영합니다. PowerGUI, PowerShellPLUS 등은 모두 호스팅 응용 프로그램이며 제품 버전을 반영하도록 호스트 버전을 설정합니다. 이는 완전히 정확하지만 원하는 것이 아닙니다.
PS C:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 -1 -1
Community Wiki
Get-Host 또는 $PSVersionTable 을 사용 합니다. Andy Schneider가 지적했듯이 $PSVersionTable
은 버전 1에서 작동하지 않습니다. 버전 2에서 도입되었습니다.
get-host Name : ConsoleHost Version : 2.0 InstanceId : d730016e-2875-4b57-9cd6-d32c8b71e18a UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-GB CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace $PSVersionTable Name Value ---- ----- CLRVersion 2.0.50727.4200 BuildVersion 6.0.6002.18111 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1
Thomas Bratt
$psversiontable
볼 수 있습니다. 존재하지 않으면 V1이 있는 것입니다. 존재하는 경우 필요한 모든 정보를 제공합니다.
1 > $psversiontable Name Value ---- ----- CLRVersion 2.0.50727.4927 BuildVersion 6.1.7600.16385 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1
Andy Schneider
PowerShell이 설치되어 있는지 확인하려면 레지스트리에서
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install
그리고
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3
그리고 존재하는 경우 블로그 게시물 Check if PowerShell installed and version 에 자세히 설명된 대로 값이 1(설치된 경우)인지 여부.
설치된 PowerShell 버전을 확인하려면 레지스트리 키를 확인할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion
그리고
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion
.ps1 스크립트에서 설치된 PowerShell 버전을 확인하려면 PowerShell.com에서 어떤 PowerShell 버전을 실행 중인지 에 자세히 설명된 대로 다음 한 줄을 사용할 수 있습니다.
$isV2 = test-path variable:\psversiontable
같은 사이트에서는 버전을 반환하는 기능도 제공합니다.
function Get-PSVersion { if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"} }
MagicAndi
명령 프롬프트에서와 같이 외부 에서 PowerShell을 호출해야만 한 줄로 버전을 직접 확인할 수 있습니다.
powershell -Command "$PSVersionTable.PSVersion"
@psaul 에 따르면 실제로 어디에서 왔는지(CMD, PowerShell 또는 Pwsh) 불가지론적인 하나의 명령을 가질 수 있습니다. 감사합니다.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
테스트한 결과 CMD와 PowerShell 모두에서 완벽하게 작동했습니다.
Patrick Bard
다음 확인을 완료하여 Windows PowerShell 버전이 설치되었는지 확인할 수 있습니다.
- 시작, 모든 프로그램, 보조프로그램, Windows PowerShell, Windows PowerShell을 차례로 클릭합니다.
Windows PowerShell 콘솔의 명령 프롬프트에 다음 명령을 입력하고 Enter 키를 누릅니다.
Get-Host | Select-Object Version
다음과 같은 출력이 표시됩니다.
Version ------- 3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
Eclipses
PowerShell이 설치되어 있는지 확인하고 설치된 버전을 결정하기 위해 Microsoft에서 권장하는 앞으로 호환 가능한 방법 은 두 가지 특정 레지스트리 키를 확인하는 것입니다. 링크가 끊어질 경우를 대비하여 여기에 세부 정보를 재현했습니다.
링크된 페이지에 따르면:
다른 레지스트리 키, PowerShell.exe 버전 또는 PowerShell.exe 위치에 따라 장기적으로 작동하지 않을 수 있습니다.
설치된 PowerShell 버전 이 있는지 확인하려면 레지스트리에서 다음 값을 확인하십시오.
- 키 위치:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
- 값 이름: 설치
- 값 유형: REG_DWORD
- 값 데이터: 0x00000001(1
PowerShell 버전 1.0 또는 2.0 이 설치되어 있는지 확인하려면 레지스트리에서 다음 값을 확인합니다.
- 키 위치:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
- 값 이름: PowerShellVersion
- 값 유형: REG_SZ
- 값 데이터: <1.0 | 2.0>
Starfish
설치 여부를 확인하는 가장 쉬운 방법은 다음과 같습니다.
- 명령 프롬프트 실행(시작, 실행,
cmd
, 확인) -
powershell
을 입력한 다음 리턴을 누르십시오. 그러면 PowerShellPS
프롬프트가 표시됩니다.
C:\Users\MyUser>powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved. PS C:\Users\MyUser>
$PSVersionTable.PSVersion
을 입력하여 PowerShell 프롬프트에서 버전을 확인할 수 있습니다.
PS C:\Users\MyUser> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 2 0 -1 -1 PS C:\Users\MyUser>
명령 프롬프트로 돌아가려면 exit
입력합니다(명령 프롬프트도 닫으려면 다시 exit
스크립트를 실행하려면 http://ss64.com/ps/syntax-run.html을 참조하십시오.
SharpC
$host.version
은 단순히 잘못되었거나 신뢰할 수 없습니다. 이렇게하면 엔진 자체의 버전을 호스팅 실행 파일 (powershell.exe를, powergui.exe, powershell_ise.exe, powershellplus.exe 등) 및하지의 버전을 제공합니다.
엔진 버전은 $psversiontable.psversion
포함되어 있습니다. PowerShell 1.0의 경우 이 변수가 존재하지 않으므로 이 변수를 사용할 수 없는 경우 분명히 엔진이 1.0이라고 가정하는 것이 완전히 안전합니다.
x0n
사용하다:
$psVersion = $PSVersionTable.PSVersion If ($psVersion) { #PowerShell Version Mapping $psVersionMappings = @() $psVersionMappings += New-Object PSObject -Property @{Name='5.1.14393.0';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows 10 Anniversary Update'} $psVersionMappings += New-Object PSObject -Property @{Name='5.1.14300.1000';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows Server 2016 Technical Preview 5'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.494';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3172985 1607'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.122';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3140743 1603'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.117';FriendlyName='Windows PowerShell 5 RTM 1602';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.63';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3135173 1602'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.51';FriendlyName='Windows PowerShell 5 RTM 1512';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10514.6';FriendlyName='Windows PowerShell 5 Production Preview 1508';ApplicableOS='Windows Server 2012 R2'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10018.0';FriendlyName='Windows PowerShell 5 Preview 1502';ApplicableOS='Windows Server 2012 R2'} $psVersionMappings += New-Object PSObject -Property @{Name='5.0.9883.0';FriendlyName='Windows PowerShell 5 Preview November 2014';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows 8.1'} $psVersionMappings += New-Object PSObject -Property @{Name='4.0';FriendlyName='Windows PowerShell 4 RTM';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'} $psVersionMappings += New-Object PSObject -Property @{Name='3.0';FriendlyName='Windows PowerShell 3 RTM';ApplicableOS='Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8, and Windows 7 SP1'} $psVersionMappings += New-Object PSObject -Property @{Name='2.0';FriendlyName='Windows PowerShell 2 RTM';ApplicableOS='Windows Server 2008 R2 SP1 and Windows 7'} foreach ($psVersionMapping in $psVersionMappings) { If ($psVersion -ge $psVersionMapping.Name) { @{CurrentVersion=$psVersion;FriendlyName=$psVersionMapping.FriendlyName;ApplicableOS=$psVersionMapping.ApplicableOS} Break } } } Else{ @{CurrentVersion='1.0';FriendlyName='Windows PowerShell 1 RTM';ApplicableOS='Windows Server 2008, Windows Server 2003, Windows Vista, Windows XP'} }
설치된 PowerShell 버전을 확인하는 방법 에서 자세한 스크립트를 다운로드할 수 있습니다.
Dale Chen
이 페이지를 잊어버리고 다시는 돌아오지 않는 가장 쉬운 방법은 Get-Variable
을 배우는 것입니다.
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
모든 변수를 기억할 필요는 없습니다. Get-Variable
이면 충분합니다("버전에 대한 정보가 있어야 함").
Roman Pokrovskij
가장 도움이 되는 답변은 if exist 부분을 다루지 않았기 때문에 빠르고 더러운 솔루션을 통해 한 번 받아볼 생각입니다. 그것은 당신이 원하는 경로 환경 변수에 있는 PowerShell에 의존합니다. (나는 그것을 몰랐기 때문에 최고의 답변에 모자 팁.) 이것을 텍스트 파일에 붙여 넣고 이름을 지정하십시오.
Powershell Version.cmd 테스트
또는 유사.
@echo off echo Checking powershell version... del "%temp%\PSVers.txt" 2>nul powershell -command "[string]$PSVersionTable.PSVersion.Major +'.'+ [string]$PSVersionTable.PSVersion.Minor | Out-File ([string](cat env:\temp) + '\PSVers.txt')" 2>nul if errorlevel 1 ( echo Powershell is not installed. Please install it from download.Microsoft.com; thanks. ) else ( echo You have installed Powershell version: type "%temp%\PSVers.txt" del "%temp%\PSVers.txt" 2>nul ) timeout 15
Pecos Bill
PowerShell이 설치되어 있는지 확인하려면 다음을 사용하십시오.
HKLM\Software\Microsoft\PowerShell\1 Install ( = 1 )
RC2 또는 RTM이 설치되어 있는지 확인하려면 다음을 사용하십시오.
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-00301) -- For RC2 HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-04309) -- For RTM
출처: 이 웹사이트 .
Daniel Elliott
파워쉘 7
허용되는 답변은 한 버전의 PowerShell이 컴퓨터에 설치된 경우에만 적합합니다. PowerShell 7의 출현으로 이 시나리오는 점점 더 가능성이 희박해졌습니다.
Microsoft 설명서에 따르면 PowerShell 7이 설치되면 추가 레지스트리 키가 생성됩니다.
PowerShell 7.1부터 [installer] 패키지는 PowerShell의 설치 위치와 버전을 저장하는 레지스트리 키를 생성합니다. 이러한 값은
HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\<GUID>
있습니다.<GUID>
의 값은 각 빌드 유형(릴리스 또는 미리 보기), 주요 버전 및 아키텍처에 대해 고유합니다.
앞서 언급한 위치에서 레지스트리를 탐색하면 다음 레지스트리 값이 나타납니다. SemanticVersion
. 이 값에는 우리가 찾는 정보가 포함되어 있습니다.
내 컴퓨터에서는 다음과 같이 나타납니다.
Path Name Type Data ---- ---- ---- ---- HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions\31ab5147-9a97-4452-8443-d9709f0516e1 SemanticVersion String 7.1.3
보시다시피 제 컴퓨터에 설치된 PowerShell 7 버전은 7.1.3입니다. PowerShell 7이 대상 컴퓨터에 설치되어 있지 않으면 키 전체가 존재하지 않아야 합니다.
Microsoft 설명서에서 언급했듯이 레지스트리 경로는 설치된 PowerShell 버전에 따라 약간 다릅니다.
주요 경로 변경의 일부는 일부 시나리오에서 문제가 될 수 있지만 명령줄 기반 솔루션에 관심이 있는 사용자의 경우 PowerShell 자체가 이 문제를 쉽게 처리할 수 있습니다.
이 레지스트리 값의 데이터를 쿼리하는 데 사용되는 PowerShell cmdlet은 Get-ItemPropertyValue
cmdlet 입니다. 다음과 같이 사용 및 출력을 관찰합니다(변경될 가능성이 있는 키 경로 부분 대신 별표 와일드카드 문자가 사용됨).
PS> Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions\*" -Name "SemanticVersion" 7.1.3
그냥 간단한 한 줄.
Bren0man
아래 cmdlet은 PowerShell 버전을 반환합니다.
$PSVersionTable.PSVersion.Major
Venkatakrishnan
PowerShell 버전을 확인한 다음 적절한 코드를 실행해야 했습니다. 일부 서버는 v5를 실행하고 다른 서버는 v4를 실행합니다. 이는 압축과 같은 일부 기능을 사용하거나 사용하지 못할 수 있음을 의미합니다.
이것이 내 솔루션입니다.
if ($PSVersionTable.PSVersion.Major -eq 5) { #Execute code available in PowerShell 5, like Compress Write-Host "You are running PowerShell version 5" } else { #Use a different process Write-Host "This is version $PSVersionTable.PSVersion.Major" }
Atron Seige
"Batch file get powershell version"에 대한 상위 검색 결과이므로 powershell 버전에 따라 배치 파일에서 조건부 흐름을 수행하는 방법에 대한 기본 예를 제공하고자 합니다.
일반적인 예
powershell "exit $PSVersionTable.PSVersion.Major" if %errorlevel% GEQ 5 ( echo Do some fancy stuff that only powershell v5 or higher supports ) else ( echo Functionality not support by current powershell version. )
실제 사례
powershell "exit $PSVersionTable.PSVersion.Major" if %errorlevel% GEQ 5 ( rem Unzip archive automatically powershell Expand-Archive Compressed.zip ) else ( rem Make the user unzip, because lazy echo Please unzip Compressed.zip prior to continuing... pause )
Derpy
PowerShell 명령줄에서 "호스트" 명령을 호출할 수도 있습니다. $host
변수의 값을 제공해야 합니다.
Tylor Durden
PowerShell 버전을 결정할 수 있는 작은 배치 스크립트를 만들었습니다.
@echo off for /f "tokens=2 delims=:" %%a in ('powershell -Command Get-Host ^| findstr /c:Version') do (echo %%a)
Get-Host
사용하여 PowerShell 버전을 추출 Version
검색합니다.
버전이 있는 줄을 찾으면 for
명령을 사용하여 버전을 추출합니다. 이 경우 구분 기호가 콜론이고 첫 번째 콜론 다음을 검색하여 제 경우에는 5.1.18362.752
됩니다.
Anic17
version 7.1.0
에서 시도했고 작동했습니다.
$PSVersionTable | Select-Object PSVersion
산출
PSVersion --------- 7.1.0
version 5.1
에서는 작동하지 않으므로 7 미만 버전에서 사용하십시오.
$PSVersionTable.PSVersion
산출
Major Minor Build Revision ----- ----- ----- -------- 5 1 18362 1171
Daniel Dut
선택 연산자로 답 확장:
Get-Host | select {$_.Version}
HaBo
출처 : http:www.stackoverflow.com/questions/1825585/determine-installed-powershell-version
'etc. > StackOverFlow' 카테고리의 다른 글
JavaScript에서 현재 날짜를 어떻게 얻습니까? (0) | 2021.11.10 |
---|---|
Maven을 사용하여 종속성이 있는 실행 가능한 JAR을 어떻게 만들 수 있습니까? (0) | 2021.11.10 |
PHP의 배열에서 요소 삭제 (0) | 2021.11.10 |
"B"를 인쇄하는 것이 "#"을 인쇄하는 것보다 훨씬 느린 이유는 무엇입니까? (0) | 2021.11.10 |
Git은 rebase에서 관련 없는 기록 병합을 거부합니다. (0) | 2021.11.09 |