Определите версию установленного PowerShell

Как определить, какая версия PowerShell установлена на компьютере, и установлена ли она вообще?

Решение

Используйте $PSVersionTable.PSVersion для определения версии движка. Если переменная не существует, можно считать, что движок имеет версию 1.0.

Обратите внимание, что $Host.Version и (Get-Host).Version не являются надежными - они отражают версию только хоста, а не движка. PowerGUI, PowerShellPLUS и т.д. являются хостинговыми приложениями, и они будут устанавливать версию хоста, чтобы отразить свой продукт version — что совершенно правильно, но не то, что вы'ищете.

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1
Комментарии (10)

Я хотел бы использовать либо вам-хозяину или $PSVersionTable. Как Энди Шнайдер отмечает, $PSVersionTable не't работа в версии 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 (для installed), как подробно описано в записи блога Проверка наличия установленного PowerShell и версии.

Чтобы определить версию установленного PowerShell, можно проверить ключи реестра

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

и

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

Чтобы определить версию PowerShell, которая установлена из сценария .ps1, можно воспользоваться следующим однострочным предложением, подробно описанным на сайте PowerShell.com в статье Which PowerShell Version Am I Running.

$isV2 = test-path variable:\psversiontable

На этом же сайте приведена функция для возврата версии:

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
Комментарии (2)

Вы можете посмотреть на встроенный в переменной $psversiontable. Если это не'т существуют, у вас есть В1. Если она действительно существует, он даст вам всю информацию вам нужно.

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    
Комментарии (0)

Вы можете сразу проверить версию с одной линией только путем вызова консоли PowerShell внешне, например, из командной строки

powershell -Command "$PSVersionTable.PSVersion"

По данным @psaul Вы можете на самом деле есть одна команда, которая не зависит от того, где она появилась (команду cmd, PowerShell или ТСЦ). Спасибо Вам за это.

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

Я'протестировали и она работала безупречно на обоих cmd и PowerShell.

Комментарии (5)

Вы можете убедиться в том, что версии Windows PowerShell установлена, выполнив следующие проверки:

  1. Нажмите кнопку Пуск, выберите Все программы, выберите пункт аксессуары, выберите пункт Windows PowerShell, а затем нажмите кнопку Windows PowerShell для.
  2. В консоли Windows PowerShell, введите следующую команду в командной строке и нажмите клавишу Ввод:

Вам-Хост | Выбрать-Версия Объекта

Вы увидите результат, который выглядит так:

Version
-------
3.0

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

Комментарии (3)

Майкрософт's рекомендуемый вперед совместимый метод для проверки, если установки PowerShell и определения установленных version, чтобы посмотреть на двух конкретных ключей реестра. Я'вэ воспроизводятся детали в случае, если связь нарушается.

По ссылке:

в зависимости от любого другого ключа реестра(ов), или версия PowerShell.exe или расположение PowerShell.exe не гарантируется работа на долгосрочную перспективу.

Чтобы проверить, если версия на PowerShell устанавливается, проверьте следующее значение в реестре:

  • Ключевые местоположения: раздел HKEY_LOCAL_MACHINE\программное обеспечение\Майкрософт\PowerShell с\1
  • Значение Имени: Установить
  • Тип значения: REG_DWORD
  • Сведения значение: 0x00000001 (1

Чтобы проверить, установлена ли версия 1.0 или 2.0 из консоли PowerShell, проверьте следующее значение в реестре:

  • Ключевые местоположения: раздел HKEY_LOCAL_MACHINE\программное обеспечение\Майкрософт\PowerShell с\1 PowerShellEngine\
  • Значение Имени: PowerShellVersion
  • Тип параметра: reg_sz
  • Значение: <1.0 | 2.0>
Комментарии (1)

Я нашел самый простой способ проверить, если установлен был:

  • запустить командную строку (Пуск, Выполнить, команду "cmd", затем OK)
  • тип PowerShell и затем нажмите Return. Тогда вам следует сделать запрос в PowerShellПС`:
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, если вы хотите, чтобы вернуться в командную строку (выход снова если вы хотите, чтобы закрыть командную строку).

Для запуска скриптов, см. http://ss64.com/ps/syntax-run.html.

Комментарии (2)

`$хозяин.версия-это просто неправильно/ненадежно. Это дает вам версия хостинг исполняемый (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe и т. д.) и не версия самого двигателя.

Двигатель версии содержится в$psversiontable.psversion`. Для PowerShell 1.0, эта переменная не существует, поэтому очевидно, что если эта переменная не доступна вполне безопасно предположить, что двигатель 1.0, очевидно.

Комментарии (0)

Использование:

$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 с.

Комментарии (0)

Чтобы проверить, установлен ли 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

Источник: этот сайт.

Комментарии (0)

Поскольку наиболее полезный ответ Не'т решать если существует часть, я думал, что я'д дают с собой брать он через быстрые и грязные решения. Он опирается на PowerShell, который будучи в пути переменные среды, что, вероятно, то, что вы хотите. (Наконечник шляпы к началу ответа, как я'т знаю, что.) Вставьте это в текст файл и назовите его

тест версии PowerShell.УМК

или похожие.

@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
Комментарии (0)

Самый простой способ забыть эту страницу и никогда не вернется к нему, чтобы узнать вам переменная`:

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

Нет необходимости запоминать каждую переменную. Просто вам будет переменная` достаточно (и "там должно быть что-то о версии и").

Комментарии (4)

Мне нужно проверить версию PowerShell и запустите соответствующий код. Некоторые из наших серверов запустить V5, и другим В4. Это означает, что некоторые функции, такие как сжатие, могут или не могут быть доступны.

Это мое решение:

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"
}
Комментарии (0)

Ниже командлет вернет версии PowerShell.

$PSVersionTable.PSVersion.Major
Комментарии (1)

Вы также можете позвонить в "хозяина" и команды из командной строки в PowerShell. Это должно дать вам значение $рать переменной.

Комментарии (1)

Это лучшие результаты поиска для "в пакетный файл Сделать PowerShell версии и", Я'd, как, чтобы обеспечить простой пример, как сделать условное потока в пакетный файл, в зависимости от 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
)
Комментарии (0)

Расширяя ответ с выберите оператора:

Get-Host | select {$_.Version}
Комментарии (5)

Так много ответов здесь. Я думал, что я'd поставил свой, потому что он'ы довольно короткий, и говорит как главных, так и второстепенных версий вместе.

$psMajorVer = $PSVersionTable.PSVersion.Major.ToString();$psMinorVer = $PSVersionTable.PSVersion.Minor.ToString();Write-Host "You have Powershell version " -NoNewline; Write-Host ($psMajorVer + "." + $psMinorVer);
Комментарии (2)