답변:
$PSVersionTable.PSVersion
엔진 버전을 확인하는 데 사용 합니다. 변수가 존재하지 않으면 엔진이 version이라고 가정하는 것이 안전합니다 1.0
.
점에 유의 $Host.Version
하고 (Get-Host).Version
신뢰할 수 없습니다 - 그들은 호스트뿐만 아니라 엔진의 버전을 반영합니다. PowerGUI, PowerShellPLUS 등은 모두 호스팅 응용 프로그램이며 제품 버전을 반영하도록 호스트 버전을 설정합니다. 이는 완전히 정확하지만 원하는 것은 아닙니다.
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
$PSVersionTable
보다 안정적이며 $ PSVersion을 반환합니다. 을 사용할 수도 있습니다 $PSVersionTable.PSVersion
. 다른 버전 ( invoke-command -computername myRemotePC -Credential foo {$host}
)을 실행하는 컴퓨터에 원격으로 연결되어 있어도 $host
직렬화에 동의 한 가장 낮은 버전 만 표시됩니다. 동안 $PSVersionTable
실제 버전을 보여줍니다. 그것이 누군가를 도울 수 있기를 바랍니다.
notepad $profile
내려 버렸 function psver { $PSVersionTable; $PSVersionTable.PSVersion }
습니다. 와 함께 다시로드하고 언제든지 버전을 . $profile
입력 psver
하여 자세한 버전 정보와 기타 세부 정보를 얻을 수 있습니다.
나도 사용하는 것이 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
$host.version
예를 들어 powergui의 경우 powershell 엔진 버전과 동일하지 않은 powergui 호스트 버전을 반환합니다 (원하는 내용)
내장 변수를 볼 수 있습니다 $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
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"}
}
명령 프롬프트와 같이 외부 에서 PowerShell을 호출하여 한 줄로만 버전을 직접 확인할 수 있습니다.
powershell -Command "$PSVersionTable.PSVersion"
에 따르면 @psaul 당신이 할 수 실제로 (CMD, PowerShell을 또는 Pwsh)를 온 곳에서 불가지론 하나 개의 명령이있다. 고마워
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
테스트를 거쳤으며 CMD와 PowerShell 모두에서 완벽하게 작동했습니다.
cmd
및 powershell
아무 소용. 나는 같은 행동을 기대했을 것이다. :)
pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
잘 작동합니다.
다음 확인을 완료하여 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/
PowerShell이 설치되어 있는지 확인하고 설치된 버전을 확인하기 위해 Microsoft에서 권장하는 정방향 호환 방법 은 두 개의 특정 레지스트리 키를 보는 것입니다. 링크가 끊어 질 경우를 대비하여 여기에서 세부 사항을 재현했습니다.
링크 된 페이지에 따르면 :
다른 레지스트리 키 또는 PowerShell.exe 버전 또는 PowerShell.exe의 위치에 따라 장기적으로 작동하지 않을 수 있습니다.
있는지 확인하려면 모든 버전 PowerShell을의가 설치되어있는 레지스트리에서 다음 값을 확인 :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
확인하려면 버전 1.0 또는 2.0 여부를 PowerShell을의를 설치, 레지스트리에서 다음 값을 확인 :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
설치되어 있는지 확인하는 가장 쉬운 방법은 다음과 같습니다.
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을 참조 하십시오 .
사용하다:
$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 버전을 확인하는 방법 에서 자세한 스크립트를 다운로드 할 수 있습니다 .
이 페이지를 잊어 버리지 않고 다시 돌아 오는 가장 쉬운 방법은 다음을 배우는 것입니다 Get-Variable
.
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
모든 변수를 기억할 필요는 없습니다. 그냥 Get-Variable
충분하다 (그리고 "버전에 대해 뭔가가 있어야한다").
$PSVersionTable
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
출처 : 이 웹 사이트 .
가장 도움이되는 답변이 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
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
$PSVersionTable
자동 변수입니다. 객체. cmdlet이 아닙니다.
이것은 "배치 파일 가져 오기 파워 쉘 버전"에 대한 최고 검색 결과이므로, 파워 쉘 버전에 따라 배치 파일에서 조건부 플로우를 수행하는 방법에 대한 기본 예제를 제공하고자합니다.
일반적인 예
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
)
PowerShell 명령 줄에서 "host"명령을 호출 할 수도 있습니다. $host
변수 의 값을 제공해야 합니다.
host
로 해결됩니다 Get-Host
. 그럼에도 불구하고 버전을 얻는 신뢰할 수있는 방법은 아닙니다.
선택 연산자를 사용하여 답변 확장하기 :
Get-Host | select {$_.Version}
Get-Host
).