prosource

설치되어 있는 PowerShell 버전 확인

probook 2023. 4. 8. 08:41
반응형

설치되어 있는 PowerShell 버전 확인

컴퓨터에 어떤 버전의 PowerShell이 설치되어 있는지, 실제로 설치되어 있는지 확인하는 방법은 무엇입니까?

$PSVersionTable.PSVersion엔진 버전을 확인합니다.하지 않는 「」으로 상정해도 합니다.1.0.

:$Host.Version ★★★★★★★★★★★★★★★★★」(Get-Host).Version을 사용하다이것은, 엔진이 아니고, 호스트의 버전만을 반영하고 있습니다.PowerGUI, PowerShell PLUS 등은 모두 애플리케이션을 호스팅하고 있으며, 제품 버전을 반영하도록 호스트의 버전을 설정합니다.이것은 완전히 맞지만, 필요한 것은 아닙니다.

PS C:\> $PSVersionTable.PSVersion

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

Get-Host 또는 $PSversionTable 하나를 사용합니다.앤디 슈나이더가 지적했듯이$PSVersionTable되었습니다.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

기본 변수인 , in,, , you you you 、 , you 、 you you 、 you 。$psversiontableV1을 사용하다존재하는 경우 필요한 모든 정보를 얻을 수 있습니다.

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    

PowerShell이 설치되어 있는지 여부를 확인하려면 레지스트리에서

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

그리고.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

또한 PowerShell 설치 여부버전 확인 블로그 게시물에서 자세히 설명한 바와 같이 값이 1(설치된 경우)인지 여부도 확인할 수 있습니다.

설치된 PowerShell의 버전을 확인하려면 레지스트리 키를 확인하십시오.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion

그리고.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion

.ps1 스크립트에서 설치된 PowerShell 버전을 확인하려면 PowerShell.com에서 자세히 설명한 대로 다음 한 줄을 사용합니다.

$isV2 = test-path variable:\psversiontable

같은 사이트에서 버전을 반환하는 기능도 제공합니다.

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}

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

powershell -Command "$PSVersionTable.PSVersion"

@psaul에 따르면 실제로 하나의 명령어(CMD, PowerShell 또는 Pwsh)를 사용할 수 있습니다.감사합니다.

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

테스트를 해봤는데 CMD와 PowerShell 모두에서 완벽하게 작동했습니다.

이미지

다음 검사를 수행하여 윈도우즈 PowerShell 버전이 설치되어 있는지 확인할 수 있습니다.

  1. 시작, 모든 프로그램, 보조 프로그램, Windows PowerShell, Windows PowerShell 순으로 클릭합니다.
  2. 윈도우즈 PowerShell 콘솔에서 명령 프롬프트에 다음 명령을 입력한 다음 Enter 키를 누르십시오.

    Get-Host | Select-Object Version
    

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

Version
-------
3.0

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

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

링크된 페이지에 따르면:

다른 레지스트리 키, 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
  • 값 이름:PowerShell 버전
  • 값 유형: REG_SZ
  • 가치 데이터: <1.0 | 2.0 >

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

  • 프롬프트를 합니다(Start, "Start", "Start", "Run", "Run"cmd [OK], [OK])
  • 「」라고 입력합니다.powershell턴을누누 누누누다다 PowerShell 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 를 참조해 주세요.

$host.version그냥 틀렸다/불가능하다.그러면 호스팅 실행 파일의 버전(powershell.exe, powergui)이 나타납니다.exe, powershell_ise.exe, powershellplus.exe 등)를 사용합니다.

은 에 되어 있습니다.$psversiontable.psversionPowerShell 1.0에서는 이 변수가 존재하지 않기 때문에 이 변수를 사용할 수 없는 경우에는 엔진이 1.0이라고 가정해도 무방합니다.

않는 은 이 페이지를 입니다.Get-Variable

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

모든 변수를 기억할 필요는 없습니다. ★★★★★★★★★★★★★★★★★.Get-Variable이 정도면 충분합니다(및 "버전에 대해 뭔가 있을 것").

용도:

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

PowerShell 7

승인된 답변은 PowerShell의 한 버전이 시스템에 설치되어 있는 경우에만 적절합니다.PowerShell 7의 등장으로 이 시나리오는 점점 더 어려워지고 있습니다.

Microsoft 문서에는 PowerShell 7 설치 시 추가 레지스트리 키가 생성된다고 나와 있습니다.

PowerShell 7.1의 [installer]의 PowerShell에 대해 설명합니다.은 러음음음음 these these these these these these these these these these 。HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\<GUID>의 の of 。<GUID>는 빌드 유형(릴리스 또는 미리보기), 메이저버전 및 아키텍처별로 고유합니다.

레지스트리를 하면 레지스트리 값인 "R" "R" "R" "Resistry"는 " 값입니다.SemanticVersion이 값에는 우리가 찾는 정보가 포함됩니다.

내 컴퓨터에는 다음과 같이 표시됩니다.

Path                                                                                           Name              Type Data
----                                                                                           ----              ---- ----
HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions\31ab5147-9a97-4452-8443-d9709f0516e1 SemanticVersion String 7.1.3

Windows 레지스트리 에디터에 지정된 키를 표시하는 이미지

보시다시피 컴퓨터에 설치된 PowerShell 7 버전은 7.1.3입니다.대상 시스템에 PowerShell 7이 설치되어 있지 않으면 키 전체가 존재하지 않습니다.

Microsoft 의 메뉴얼에 기재되어 있듯이, 레지스트리 패스는, 인스톨 되고 있는 PowerShell 의 버전에 의해서 약간 다릅니다.

일부 키 경로 변경은 일부 시나리오에서 문제가 될 수 있지만 명령줄 기반 솔루션에 관심이 있는 사용자는 PowerShell 자체에서 이 문제를 쉽게 해결할 수 있습니다.

이 레지스트리 값의 데이터를 쿼리하는 데 사용되는 PowerShell cmdlet이 cmdlet입니다.그 사용방법 및 출력에 주의해 주십시오(키 패스의 변경 가능성이 있는 부분 대신에 사용되는 아스타리스크 와일드카드 문자 참조).

PS> Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions\*" -Name "SemanticVersion"

7.1.3

간단한 원라이너입니다.

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

출처: 이 웹사이트.

가장 도움이 되는 답변은 존재여부를 다루지 않았기 때문에, 저는 빠르고 더러운 해결책으로 그것을 받아들이려고 했습니다.PowerShell이 경로 환경 변수에 포함되어 있는지 여부에 따라 달라집니다. 이는 사용자가 원하는 것일 수 있습니다. (모르쇠로 맨 위의 답변에 대한 힌트입니다.텍스트 파일에 붙여넣고 이름을 지정합니다.

Powershell 버전 테스트.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

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

다음 cmdlet은 PowerShell 버전을 반환합니다.

$PSVersionTable.PSVersion.Major

이것은 "Batch file get powershell version"의 상위 검색 결과이므로 powershell version에 따라 배치 파일에서 조건부 플로우를 수행하는 기본적인 예를 제시하겠습니다.

일반적인 예

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
)

이거 입어봤어version 7.1.0효과가 있었습니다.

$PSVersionTable | Select-Object PSVersion

산출량

PSVersion
---------
7.1.0

이 동작하지 않는다version 5.17시 7분, 7시 7분 에서는 이 을 사용하세요.

$PSVersionTable.PSVersion

산출량

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      18362  1171

편집

PowerShell 7.2.5에서는 다음 작업을 수행할 수 있습니다.

pwsh -v

또는

pwsh --version

산출량

PowerShell 7.2.5

PowerShell "호스트"를 선택합니다. 하면 그 알 수 있을 거예요.$host★★★★★★ 。

매우 오래된 질문이지만 여전히 관련이 있습니다. 단지 2023년에 문제의 성격이 달라졌을 뿐입니다.버전을 찾는 것은 쉽지만 먼저 올바른 실행 파일을 시작해야 합니다.그러기 위해서는 기본적으로 레지스트리를 다시 살펴봐야 합니다.

reg query "HKLM\SOFTWARE\Microsoft\PowerShell\1" /v Install >nul 2>&1
if %ERRORLEVEL% EQU 0 (
  :: Default to PowerShell 5 if both are installed
  set PSEXE=powershell
) else (
  set PSEXE=pwsh
)
echo Using %PSEXE%
%PSEXE% -ExecutionPolicy bypass -command "& { ... ; exit $LASTEXITCODE }"

환경변수를 조사함으로써 얻을 수 있는 힌트가 있지만 레지스트리를 'Windows' PowerShell로 테스트하는 것이 가장 안전하다고 생각합니다.

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

Get-Host | select {$_.Version}

PowerShell 버전을 확인할 수 있는 작은 배치 스크립트를 만들었습니다.

@echo off
for /f "tokens=2 delims=:" %%a in ('powershell -Command Get-Host ^| findstr /c:Version') do (echo %%a)

PowerShell을 사용하여 만 하면 .Get-Host는 문자열 입니다.Version

되면, 「」를 합니다.for이치노첫콜론 제 는 콜론입니다.그 결과 이 경우는5.1.18362.752.

언급URL : https://stackoverflow.com/questions/1825585/determine-installed-powershell-version

반응형