설치된 PowerShell 버전 확인


2631

컴퓨터에 설치되어있는 PowerShell 버전과 실제로 설치되어있는 PowerShell 버전을 어떻게 확인할 수 있습니까?

답변:


3583

$PSVersionTable.PSVersion엔진 버전을 확인하는 데 사용 합니다. 변수가 존재하지 않으면 엔진이 version이라고 가정하는 것이 안전합니다 1.0.

점에 유의 $Host.Version하고 (Get-Host).Version신뢰할 수 없습니다 - 그들은 호스트뿐만 아니라 엔진의 버전을 반영합니다. PowerGUI, PowerShellPLUS 등은 모두 호스팅 응용 프로그램이며 제품 버전을 반영하도록 호스트 버전을 설정합니다. 이는 완전히 정확하지만 원하는 것은 아닙니다.

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

2
@DanielCassidy-2 년 후 파티에 늦었지만 "일부 기능을 사용할 수없는 경우"는 .Net 3.5 Compact 프레임 워크 만 설치 한 경우에만 발생할 수 있습니다.
Dave Neeley

83
$PSVersionTable보다 안정적이며 $ PSVersion을 반환합니다. 을 사용할 수도 있습니다 $PSVersionTable.PSVersion. 다른 버전 ( invoke-command -computername myRemotePC -Credential foo {$host})을 실행하는 컴퓨터에 원격으로 연결되어 있어도 $host직렬화에 동의 한 가장 낮은 버전 만 표시됩니다. 동안 $PSVersionTable실제 버전을 보여줍니다. 그것이 누군가를 도울 수 있기를 바랍니다.
vulcan raven

16
$ host.Version은 좋은 선택이 아닌 것 같습니다 ... PowerShell 3을 실행하는 컴퓨터에 원격으로 연결하면 RemotingHost가 v1 인 것처럼 1.0이 다시 나타납니다. $ PSVersionTable을 사용하면 올바르게 3을 반환합니다.
Danny Tuppeny

25
@Starfish 표시된 명령은 명령 프롬프트를 사용하여 Powershell을 시작합니다. "powershell을 찾을 수 없습니다"라는 명령이 설치되어 있지 않으면 오류가 발생하지 않습니까?
jpmc26

9
여기로 돌아와서 너무 피곤해서 방금 뛰어 notepad $profile내려 버렸 function psver { $PSVersionTable; $PSVersionTable.PSVersion }습니다. 와 함께 다시로드하고 언제든지 버전을 . $profile입력 psver하여 자세한 버전 정보와 기타 세부 정보를 얻을 수 있습니다.
ADTC

432

나도 사용하는 것이 GET-호스트 또는 $ 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

5
감사합니다! 주의 : v1 Powershell에서 수동으로 업그레이드 한 XP에서 실제 폴더 및 레지스트리 경로 (오해의 소지가?!)는 v1 NOT v2를 참조합니다. 이것은 여기에 다른 사람들이 지정한 것과 같지만 설치 여부에 대해 너무 걱정 한 이유입니다. 내 길은; C : \ WINDOWS \ system32 \ windowspowershell \ v1.0
AnneTheAgile

4
$ psversiontable이 존재하지 않는다면 v1.0을 사용한다고 가정하는 것이 안전합니다. $host.version예를 들어 powergui의 경우 powershell 엔진 버전과 동일하지 않은 powergui 호스트 버전을 반환합니다 (원하는 내용)
x0n

10
허용되는 답변은 "... $ Host.Version 및 (Get-Host) .Version은 신뢰할 수 없습니다. 엔진이 아닌 호스트의 버전 만 반영합니다 . " 입니다.
피터 Mortensen

99

내장 변수를 볼 수 있습니다 $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    

96

PowerShell이 ​​설치되어 있는지 확인하려면 레지스트리가 있는지 확인하십시오.

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

그리고 블로그 게시물에 설명 된대로 값이 1 (설치된 경우)인지 여부는 PowerShell 설치 여부 및 버전 확인을 참조하십시오 .

설치된 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"}
}

4
Windows 2003 서버에서 PowerShell의 시작 메뉴 항목을 찾을 수 없었지만 (명확하지는 않았지만) 레지스트리 키가 내 질문에 답변했기 때문에 유용합니다.
전체적 개발자

7
PowerScript 3.0의 경우 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 외에 새로운 항목 인 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3이 있습니다. 이 경우 버전을 가져 오기위한 적절한 위치는 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 \ PowerShellEngine \ PowerShellVersion (샘플 값은 "3.0")입니다.
피터 Mortensen

47

명령 프롬프트와 같이 외부 에서 PowerShell을 호출하여 한 줄로만 버전을 직접 확인할 수 있습니다.

powershell -Command "$PSVersionTable.PSVersion"

에 따르면 @psaul 당신이 할 수 실제로 (CMD, PowerShell을 또는 Pwsh)를 온 곳에서 불가지론 하나 개의 명령이있다. 고마워

powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"

테스트를 거쳤으며 CMD와 PowerShell 모두에서 완벽하게 작동했습니다.

영상


"System.Collections.Hashtable.PSVersion :"System.Collections.Hashtable.PSVersion "이라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다. 이름의 철자 또는 경로가 포함 된 경우 경로가 올바른지 확인한 후 다시 시도하십시오. " 항상 작동하지는 않음
Gonmator

코너 케이스를 아는 것이 좋기 때문에 당신이 지적한 것이 기쁘지만 여전히 대다수의 사람들에게 효과적이라고 생각합니다.
패트릭 바드

@Gonmator는 PowerShell 이이 명령으로 동일한 방식으로 작동한다고 생각하지만 불행히도 그렇지 않습니다. 나는 사이 불가지론 작업에 대한 구문을 수정하려고 시도했다 cmdpowershell아무 소용. 나는 같은 행동을 기대했을 것이다. :)
tresf

3
@tresf (및 @Gonmator)는 CMD, PowerShell 또는 Pwsh (PS 6.0)에서이 기능을 무시하고 실행할 수 있지만 다음 형식을 사용해야합니다. powershell -command "(Get-Variable PSVersionTable -ValueOnly) .PSVersion"
PSaul

Mac에서도 테스트되었습니다. pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion" 잘 작동합니다.
tresf

37

다음 확인을 완료하여 Windows PowerShell 버전이 설치되었는지 확인할 수 있습니다.

  1. 시작, 모든 프로그램, 보조 프로그램, Windows PowerShell, Windows PowerShell을 차례로 클릭합니다.
  2. Windows PowerShell 콘솔의 명령 프롬프트에서 다음 명령을 입력하고 Enter 키를 누릅니다.

    Get-Host | Select-Object Version

다음과 같은 출력이 표시됩니다.

Version
-------
3.0

http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/


1
powershell이 ​​기본 옵션으로 설치되었고 바로 가기가 시작 메뉴에서 제거되지 않았다고 가정합니다. 레지스트리 테스트를 사용하는 것이 좋습니다.
Xalorous

PowerShell을 먼저 사용해야하는 경우 표준으로 실행하려고 시도하고 설치 한 다음 아이콘을 찾지 못하면 명령 프롬프트에서 실행하려고합니다. 나는 당신이 레지스트리에서 시작 생각하지 않습니다.
이클립스

6
허용되는 답변은 "... $ Host.Version 및 (Get-Host) .Version은 신뢰할 수 없습니다. 엔진이 아닌 호스트의 버전 만 반영합니다 . " 입니다.
피터 Mortensen

21

PowerShell이 ​​설치되어 있는지 확인하고 설치된 버전을 확인하기 위해 Microsoft에서 권장하는 정방향 호환 방법 은 두 개의 특정 레지스트리 키를 보는 것입니다. 링크가 끊어 질 경우를 대비하여 여기에서 세부 사항을 재현했습니다.

링크 된 페이지에 따르면 :

다른 레지스트리 키 또는 PowerShell.exe 버전 또는 PowerShell.exe의 위치에 따라 장기적으로 작동하지 않을 수 있습니다.

있는지 확인하려면 모든 버전 PowerShell을의가 설치되어있는 레지스트리에서 다음 값을 확인 :

  • 주요 위치 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • 값 이름 : 설치
  • 값 종류 : REG_DWORD
  • 값 데이터 : 0x00000001 (1

확인하려면 버전 1.0 또는 2.0 여부를 PowerShell을의를 설치, 레지스트리에서 다음 값을 확인 :

  • 주요 위치 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • 값 이름 : PowerShellVersion
  • 값 종류 : REG_SZ
  • 값 데이터 : <1.0 | 2.0>

5
PowerShell 3.0의 경우 새로운 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3으로 나타납니다 .
피터 Mortensen

11

설치되어 있는지 확인하는 가장 쉬운 방법은 다음과 같습니다.

  • 명령 프롬프트를 실행하십시오 (시작, 실행, cmd및 확인).
  • 입력 powershell한 다음 return 키를 누르십시오. 그런 다음 PowerShell PS프롬프트가 나타납니다.

C:\Users\MyUser>powershell

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\MyUser>

그런 다음 다음을 입력하여 PowerShell 프롬프트에서 버전을 확인할 수 있습니다 $PSVersionTable.PSVersion.

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을 참조 하십시오 .


3
허용되는 답변 과 마찬가지로 PowerShell 1.0에 대해서는 아무것도 반환하지 않습니다. 레지스트리 방법 이 더 명확합니다.
Peter Mortensen

4
powershell이 ​​경로에 없으면이 버전은 설치되지 않았다는 잘못된 인상을 줄 것입니다. 레지스트리 방법은 전체 정보를 제공합니다. 존재 및 버전.
Xalorous

9

$host.version명백한 잘못 / 신뢰할 수없는 것입니다. 이것은 호스팅 실행 파일 (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe 등)의 버전을 제공 하지만 엔진 자체의 버전을.

엔진 버전은에 포함되어 $psversiontable.psversion있습니다. PowerShell 1.0의 경우이 변수가 존재하지 않으므로이 변수를 사용할 수없는 경우 분명히 엔진이 1.0이라고 가정하는 것이 안전합니다.


9

사용하다:

$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 버전을 확인하는 방법 에서 자세한 스크립트를 다운로드 할 수 있습니다 .


8

이 페이지를 잊어 버리지 않고 다시 돌아 오는 가장 쉬운 방법은 다음을 배우는 것입니다 Get-Variable.

Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}

모든 변수를 기억할 필요는 없습니다. 그냥 Get-Variable충분하다 (그리고 "버전에 대해 뭔가가 있어야한다").


8
$PSVersionTable
orad

6
PS 버전을 찾고 계십니까? $ PSVersion [탭] [입력] 유형. 끝난. 아무것도 기억할 필요가 없습니다 :)
orad

1
이것은 실제로 사용되는 배관 트릭에 매우 익숙한 경우에만 유용합니다. 초보자는 $ PSVersionTable을 기억하는 것보다 모든 구문을 쉽게 기억할 수는 없습니다.
Joseph Gabriel

1
여러분, Get-Variable은 단독으로 잘 작동합니다 (버전을 얻는 데 필요한 모든 것이라면), 배관은 농담입니다 :) 배관 구문도 기억하지 못합니다.
Roman Pokrovskij 2016 년

7

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

출처 : 이 웹 사이트 .


7

가장 도움이되는 답변이 if exist 부분을 다루지 않았기 때문에 빠르고 더러운 솔루션을 통해 그것을 취할 것이라고 생각했습니다. PowerShell은 경로 환경 변수에 있으며 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

4

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


1

이것은 "배치 파일 가져 오기 파워 쉘 버전"에 대한 최고 검색 결과이므로, 파워 쉘 버전에 따라 배치 파일에서 조건부 플로우를 수행하는 방법에 대한 기본 예제를 제공하고자합니다.

일반적인 예

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
)

0

PowerShell 명령 줄에서 "host"명령을 호출 할 수도 있습니다. $host변수 의 값을 제공해야 합니다.


3
이것은 반 잘못입니다. host로 해결됩니다 Get-Host. 그럼에도 불구하고 버전을 얻는 신뢰할 수있는 방법은 아닙니다.
막시밀리안 버스 즐리

-1

선택 연산자를 사용하여 답변 확장하기 :

Get-Host | select {$_.Version}

7
허용되는 답변은 "... $ Host.Version 및 (Get-Host) .Version은 신뢰할 수 없습니다. 엔진이 아닌 호스트의 버전 만 반영합니다 . " 입니다.
Peter Mortensen

@PeterMortensen 내 답변이 허용 된 답변 이전 인 것 같습니다
HaBo

2
@HaBo 무엇을보고 있습니까? 허용 된 답변은 2009 년입니다.
TylerH

@TylerH 그래서 무엇? 나는 당신의 질문을 따르지 않습니다. 내 대답은 분명히 받아 들인 대답의 확장을 말합니다. 간단한 버전입니다.
HaBo

2
@HaBo 이전 의견은 답변이 수락 된 답변 전에 게시되었다는 사실로 답변을 정당화하는 것처럼 읽 힙니다. 귀하의 답변은 수락 된 답변 7 년 후, 답변 후 6 년이 지나서 실제로 '확장'됩니다. 말하자면, 당신의 대답은 그것이 받아 들여진 대답 의 확장이라고 명확하게 말하지 는 않습니다 (심지어 사용하지 않습니다 Get-Host).
TylerH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.