Как определить, какая версия PowerShell установлена на компьютере, и действительно ли она установлена вообще?
Определите установленную версию PowerShell
Ответ 1
Используйте $PSVersionTable.PSVersion для определения версии двигателя. Если переменная не существует, можно с уверенностью предположить, что движок имеет версию 1.0.
Обратите внимание, что $Host.Version и (Get-Host).Version не являются надежными - они отражают
только версия хоста, а не движок. PowerGUI,
PowerShellPLUS и т.д. - все хостинг-приложения и
они установят версию хоста, чтобы отразить их продукт
версия — что совершенно правильно, но не то, что вы ищете.
PS C:\> $PSVersionTable.PSVersion
Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1
Ответ 2
 Я бы использовал  Get-Host или $ PSVersionTable. Как указывает Энди Шнайдер, $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
Ответ 3
Чтобы определить, установлена ли 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
Чтобы определить версию PowerShell, установленную с .ps1 script, вы можете использовать следующий однострочный, как описано в 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
 Вы можете посмотреть на встроенную переменную $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    
Ответ 5
Вы можете напрямую проверить версию одной строкой, вызывая PowerShell извне, например из командной строки
powershell -Command "$PSVersionTable.PSVersion"
Согласно @psaul, вы можете иметь одну команду, которая не зависит от того, откуда она пришла (CMD, PowerShell или Pwsh). Спасибо за это.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
Я тестировал, и он работал безупречно как на CMD, так и на PowerShell.
Ответ 6
Вы можете проверить, установлена ли версия Windows PowerShell, выполнив следующую проверку:
- Нажмите "Пуск", выберите "Все программы", "Стандартные", "Windows PowerShell" и "Windows PowerShell".
-  В консоли Windows PowerShell введите следующую команду в командной строке и нажмите клавишу ВВОД: Get-Host | Select-Object Version
Вы увидите вывод, который выглядит следующим образом:
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
Ответ 7
Microsoft рекомендовала пересылать совместимый метод проверки наличия 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
- Значение Имя: PowerShellVersion
- Тип значения: REG_SZ
- Значение: < 1.0 | 2.0 >
Ответ 8
Я нашел самый простой способ проверить, было ли установлено:
-  запустите командную строку (Пуск, Выполнить, cmd, затем ОК)
-  введите powershell, затем нажмите return. Затем вы получите приглашение PowerShellPS:
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.
Ответ 9
 $host.version просто неправильный/ненадежный. Это дает вам версию исполняемого файла хостинга (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe и т.д.) И  не версию самого движка.
Версия двигателя содержится в $psversiontable.psversion. Для PowerShell 1.0 эта переменная не существует, поэтому, очевидно, если эта переменная недоступна, вполне очевидно предположить, что движок 1.0, очевидно.
Ответ 10
Использование:
$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.
Ответ 11
Чтобы проверить, установлен ли 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
Источник: этот сайт.
Ответ 12
Так как самый полезный ответ не касался части if, я думал, что дам вам взять его через быстрое и грязное решение. Он полагается на PowerShell, находящийся в переменной переменная окружения, которая, скорее всего, вам нужна. (Подсказка шляпы на верхний ответ, поскольку я этого не знал). Вставьте это в текстовый файл и назовите его
Test 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
Ответ 13
Самый простой способ забыть эту страницу и никогда не возвращаться к ней - это изучить Get-Variable:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
Нет необходимости запоминать каждую переменную. Просто Get-Variable достаточно (и "должно быть что-то о версии" ).
Ответ 14
Попробуйте выполнить следующую команду:
Get-Host
Видно здесь
Ответ 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"
}
Ответ 16
Используйте команду Get-Host. Вторая строка результата - версия.
Ответ 17
Следующий командлет вернет версию PowerShell.
$PSVersionTable.PSVersion.Major
Ответ 18
Попробуйте;)
((Get-Host).Version).Major
Ответ 19
Вы также можете вызвать команду "host" из командной строки PowerShell. Он должен дать вам значение переменной $host.
Ответ 20
Это лучший результат поиска для "Пакетный файл получить версию PowerShell", поэтому я хотел бы привести базовый пример того, как выполнить условный поток в пакетном файле в зависимости от версии 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
)
Ответ 21
Используйте Get-Host, чтобы получить информацию о версии PowerShell:
PS C:\Users\ashash001c> Get-Host
Name             : ConsoleHost
Version          : 2.0
InstanceId       : ##################################
UI               : System.Management.Automation.Internal.Host.InternalHostUserI
                   nterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
Ответ 22
Расширение ответа с помощью оператора select:
Get-Host | select {$_.Version}
Ответ 23
# Get PowerShell Version
function Global:version
{
      $PSVersionTable.PSVersion
}
Ответ 24
Если вы просто хотите проверить, чтобы у вас был основной номер версии, вы можете получить только это число в переменной $host.version.major:
if (2 -ge $host.version.major) { "Make it so!" } else { "Full Stop!" }
Ответ 25
Обычно вы получаете его с помощью основного номера, которое вы можете получить следующим образом:
$PSVersionTable.PSVersion.Major
Ответ 26
Здесь так много ответов. Я думал, что я поставлю свой здесь, потому что он довольно короткий, и говорит, что основные и второстепенные версии вместе.
$psMajorVer = $PSVersionTable.PSVersion.Major.ToString();$psMinorVer = $PSVersionTable.PSVersion.Minor.ToString();Write-Host "You have Powershell version " -NoNewline; Write-Host ($psMajorVer + "." + $psMinorVer);

