Определить установленную версию PowerShell - PullRequest
2411 голосов
/ 01 декабря 2009

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

Ответы [ 19 ]

3276 голосов
/ 01 декабря 2009

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

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

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1
418 голосов
/ 19 января 2010

Я бы использовал 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
93 голосов
/ 01 декабря 2009

Вы можете посмотреть на встроенную переменную, $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    
92 голосов
/ 01 декабря 2009

Чтобы определить, установлен ли 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, вы можете использовать следующую однострочную версию, как подробно описано на PowerShell.com в Какая версия PowerShell запущена .

$isV2 = test-path variable:\psversiontable

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

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
40 голосов
/ 25 апреля 2017

Просто хочу добавить мои 2 цента здесь.

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

powershell -Command "$PSVersionTable.PSVersion"

EDIT:

Согласно @ psaul у вас может действительно есть одна команда, которая не зависит от того, откуда она пришла (CMD, Powershell или Pwsh), спасибо вам за это.

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

Я тестировал, и он работал безупречно как на CMD, так и на Powershell

image

30 голосов
/ 10 марта 2014

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

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

    Get-Host | Select-Object Version
    

Вы увидите вывод, который выглядит следующим образом:

Version
-------
3.0

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

19 голосов
/ 17 июня 2013

Рекомендуемый Microsoft метод прямой совместимости для проверки, установлен ли PowerShell и определения установленной версии , заключается в проверке двух конкретных разделов реестра. Я воспроизвел детали здесь на случай разрыва связи.

Согласно связанной странице:

В зависимости от любых других разделов реестра, версии 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>
11 голосов
/ 04 ноября 2014

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

  • запустить командную строку (Пуск, Выполнить, 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.

9 голосов
/ 01 ноября 2016

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

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

9 голосов
/ 18 апреля 2013

$host.version просто неправильно / ненадежно. Это дает вам версию исполняемого файла хостинга (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe и т. Д.) И , а не версию самого движка.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...