Питання Визначте встановлену версію PowerShell


Як визначити версію PowerShell, встановлену на комп'ютері, і якщо вона взагалі встановлена?


2085
2017-12-01 11:30


походження


Кримінально, що потрібно поставити це питання. Microsoft повинна забезпечити послідовний спосіб знайти найновішу версію для всього встановленого програмного забезпечення. - user1040323
Цей послідовний шлях буде менеджером пакетів, що мені подобається кожен раз, коли я отримую використовувати Linux. - aaaaaa


Відповіді:


Використовуйте $PSVersionTable.PSVersion щоб визначити версію двигуна. Якщо змінної не існує, можна вважати, що движок є версією 1.0.

Зауважте, що $Host.Version і (Get-Host).Version не є надійними - вони відображають тільки версія хоста, а не движок. PowerGUI PowerShellPLUS і т. Д. - всі хостингові програми, а також вони будуть встановлювати версію хоста для відображення їх продукту версія - це цілком правильно, але не те, що ви шукаєте.

PS C:\> $PSVersionTable.PSVersion

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

2802
2018-01-19 11:06



Хм ... нуля, останній коментар. Здається, що PS2 встановлений, але деякі функції є невідповідально недоступними, і з якоїсь причини каталог встановлення називається "1.0". Спасибо, Microsoft. - Daniel Cassidy
$PSVersionTable більш надійний і повертає $ PSVersion. Ви також можете використовувати $PSVersionTable.PSVersion. Навіть якщо ви віддалено під'єднані до машини, яка працює з іншою версією (invoke-command -computername myRemotePC -Credential foo {$host}), це виглядає як $host просто показуватиме найнижчу версію, про яку вони погодились, для серіалізації. Поки $PSVersionTable покаже справжню версію. Сподіваюся, що це допоможе комусь .. - vulcan raven
Схоже на $ host.Version - це не найкращий вибір ... Якщо ви віддалені від машини під керуванням PowerShell 3, ви отримаєте назад 1,0, оскільки RemotingHost, схоже, є v1. Використання $ PSVersionTable правильно повертає 3. - Danny Tuppeny
-1, оскільки це не відповідає, як визначити, чи встановлено PowerShell взагалі, як це було задано в оригінальному питанні. Microsoft рекомендує перевіряти реєстр щоб побачити, яка версія, якщо така є, встановлена. Як зазначено на пов'язаній сторінці, цей метод є єдиним, який гарантовано працює на довгостроковій основі. - Starfish
@Starfish Задана команда запускає Powershell за допомогою командного рядка. Чи не була б команда просто помилятися за допомогою "powershell not found", якщо вона не встановлена? - jpmc26


Я б хотів використати те й інше 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

371
2017-12-01 11:34



Дякую! Примітка. У моєму XP, де я вручну оновлено з v1 Powershell, справжню папку та шляхи реєстру (помилково ?!), посилання v1 НЕ v2. Це так, як інші вказують, але саме тому я так хвилювався, чи встановив я це. Мій шлях; C: \ WINDOWS \ system32 \ windowspowershell \ v1.0 - AnneTheAgile
Якщо $ psversiontable не існує, цілком безпечно припустити, що ви перебуваєте на v1.0 - і привіт, що також відповідає на ваше запитання. $host.version не є надійним - наприклад, у powergui, він повертає версію хоста powergui, яка не співпадає з версією двигуна powershell (що є бажаним.) - x0n
Приємно Навіть отримання основної версії в більшості випадків є більш ніж достатньо через командлет get-host. - RBT
Прийнята відповідь каже "... $ Host.Version і (Get-Host) .Version не надійні - вони відображають тільки версію хоста, а не движка". - Peter Mortensen


Щоб визначити, чи встановлено 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"}
}

87
2017-12-01 14:37



Корисно, тому що на сервері Windows 2003 я не міг знайти пункт меню "Пуск" для PowerShell (це було там, але не очевидно), але ключ реєстру відповів на моє запитання. - Holistic Developer
+1 Це теж метод, який рекомендує Microsoftдля виявлення - Starfish
Для PowerScript 3.0, здається, є новий запис HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 (крім HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1) Належне місце в цьому випадку для отримання версії, схоже, є HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 \ PowerShellEngine \ PowerShellVersion (значення вибірки - "3.0"). - Peter Mortensen


Ви можете подивитися на вбудовану змінну, $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    

77
2018-04-25 13:47





Просто хочу додати свої 2 центи тут.

Ви можете безпосередньо перевірити версію з однією лінією лише за допомогою кнопки powershell зовні, наприклад, з командного рядка

powershell -Command "$PSVersionTable.PSVersion"

EDIT:

Відповідно до @psaul ви може насправді є одна команда, яка є агностиком звідки вона прийшла (CMD, Powershell або Pwsh), дякую за це.

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

Я тестував і працював бездоганно на обох CMD і Powershell

image


23
2018-03-10 11:32



Я отримую цю жахливу помилку з цією спробою: "System.Collections.Hashtable.PSVersion: Термін" System.Collections.Hashtable.PSVersion "не розпізнається як ім'я командлета, функції, файлу сценарію або операційної програми. Перевірте орфографія назви або, якщо шлях був включений, перевірити правильність шляху та спробувати ще раз. ". Так що не завжди працює - Gonmator
Я радий, що ви це вказали, оскільки добре знати кутові справи, але я думаю, що це все ще працює для більшості людей. - Patrick Bard
@ tresf дозвольте мені використовувати ваші слова в моїй відповіді, щоб запобігти подальшому непорозумінь. - Patrick Bard
@PatrickBard, будь ласка. - tresf
@tresf (і @Gonmator), ви можете запустити це агностично з CMD, PowerShell або навіть Pwsh (PS 6.0), але вам потрібно скористатися цією формою: powershell-command "(Get-Variable PSVersionTable -ValueOnly) .PSVersion (що буде працювати у всіх випадках) - PSaul


Ви можете перевірити, чи встановлена ​​версія Windows PowerShell, виконавши таку перевірку:

  1. Натисніть кнопку Пуск, виберіть пункт Усі програми, виберіть пункт Аксесуари, клацніть Windows PowerShell, а потім клацніть Windows PowerShell.
  2. У консолі Windows PowerShell введіть у командному рядку таку команду та натисніть клавішу ENTER:

    Get-Host | Select-Object Version

Ви побачите вивід, який виглядає так:

Version
-------
3.0

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


19
2018-06-17 07:59



Ви припускаєте, що powerhell була встановлена ​​за замовчуванням, і ярлики не були вилучені з меню «Пуск». Краще скористатися тестом реєстру. - Xalorous
Я думаю, що якщо вам спочатку потрібно використовувати PowerShell, спробуйте запустити його як стандартний, його слід встановити, тоді якщо ви не знайдете значок, спробуйте його знайти, то, можливо, ви спробуєте запустити його з командного рядка. Я не думаю, що ти починаєш з реєстру. - Eclipses
Прийнята відповідь каже "... $ Host.Version і (Get-Host) .Version не надійні - вони відображають тільки версію хоста, а не движка". - Peter Mortensen


Рекомендований для 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>

18
2017-11-04 10:24



Для PowerShell 3.0, як видається, є новий, HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3. - Peter Mortensen
Це не працює на win7. Я вважаю, що ключі реєстру Powershell тепер видаляються. - N-ate