В PowerShell существует множество способов сделать одно и то же (или близкое к этому). В этом блоге вы узнаете каждый способ проверить версию PowerShell, которую у вас есть на локальных и удаленных компьютерах. Мы рассмотрим неправильные способы и мой рекомендуемый способ.
Существуют веб-сайты, которые показывают различные способы проверки версии вашего PowerShell. Но ни один из них не составил исчерпывающий список всех из них. Я решил это изменить.
Все эти способы должны работать как в Windows PowerShell, так и в PowerShell Core. Эти методы также должны работать в версиях Windows PowerShell от 1.0 до PowerShell 7.
Способы, которыми вы можете узнать версию PowerShell, которую вы используете:
- Свойство
(Get-Host).Version
- Свойство
$host.Version
- Реестр (только в Windows PowerShell)
- Свойство
$PSVersionTable.PSVersion
Давайте разберем все способы определения версии PowerShell от наименее рекомендуемого до наиболее рекомендуемого.
Get-Host
В PowerShell существует концепция, известная как хосты. Хост – это программа, которая хостит среду выполнения PowerShell. Это не сам движок PowerShell. Консоль PowerShell или редактор кода с интегрированным терминалом – это хосты PowerShell.
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
Если вы запустите (Get-Host).Version
, вы увидите, что он возвращает номер версии, который выглядит так, будто это может быть версией движка PowerShell. Но внешность может быть обманчивой.
Ниже я запустил Get-Host
в Windows PowerShell 5.1, и вы видите, что возвращается 5.1.17134.858. Это выглядит как легитимная версия.
Однако иногда, когда вы запускаете Get-Host
в интегрированном терминале, версия не совпадает. Хотя обычно хост будет представлять ту же версию движка, это не всегда так.
Проверьте версию PowerShell с помощью Get-Host на удаленных компьютерах
Несмотря на то, что Get-Host
кажется возвращающим ту же версию при запуске на локальном компьютере, на удаленных компьютерах это никогда не произойдет.
Например, давайте запустим Get-Host
на удаленном сервере Windows Server 2016 через Invoke-Command
и посмотрим, что произойдет.
Последний раз, когда я проверял, невозможно запустить PowerShell v1 на Windows Server 2016.
Полагаться на Get-Host
– это плохая идея во всех отношениях.
Проверьте версию PowerShell с помощью команды $host.Version
Ссылка на $host.Version
– еще один способ проверить версию PowerShell. Переменная $host
– это автоматическая переменная, которая возвращает тот же вывод, что и Get-Host
.

$host.Version
Нет ничего особенного в этом методе. Это просто то же самое, что выполнение Get-Host
.
$host.Version на удаленных компьютерах
Вы увидите то же самое поведение через PowerShell Remoting с $host.Version
, что и при выполнении Get-Host
.
Опасность, Уилл Робинсон!
Реестр
Если вы не хотите открывать сам PowerShell, вы также можете проверить реестр. Версия PowerShell хранится под значением в пути к ключу реестра HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Этот ключ реестра имеет значение с именем PowerShellVersion
, на которое вы можете ссылаться, используя Get-ItemProperty
.
Вы можете видеть, что эта версия похожа, но не включает ревизию, как другие варианты.
Использование других инструментов
Использование реестра также означает, что вам не нужно использовать PowerShell вообще, чтобы найти версию. Вы можете запускать команды из командной строки или другого инструмента, который может читать реестр.
Реестр на удаленных компьютерах
Реестр является статическим, и значения не изменятся локально или удаленно. Вы можете быть уверены, что то, что вы видите локально, будет таким же, как и удаленно.
Показ одной и той же версии локально и удаленно хорош. Но у меня есть лучший способ показать вам, используя автоматическую переменную $PSVersionTable
.
Проверьте версию Powershell с помощью команды $PSVersionTable.PSVersion
Последний и окончательный метод – обращение к свойству PSVersion
автоматической переменной $PSVersionTable
. Этот метод всегда будет отображать версию движка PowerShell.
Автоматическая переменная $PSVersionTable
представляет собой доступную только для чтения хэш-таблицу, которая возвращает информацию специально о версии движка PowerShell. Эта автоматическая переменная не только возвращает версию, но также PSEdition. Это свойство может быть либо Core, либо Desktop, чтобы предоставить дополнительную информацию об выпуске PowerShell, который используется.

$PSVersionTable на удаленных компьютерах
Использование автоматической переменной $PSVersionTable
точно как локально, так и удаленно. Вы можете видеть ниже, что обернув $PSVersionTable.PSVersion
в скриптблок и выполнив этот код на удаленном компьютере, он вернет ту же версию.
Резюме
В этом блоге вы узнали все способы проверки версии PowerShell как локально, так и удаленно. Надеюсь, что первые несколько методов дали вам представление о том, какие способы использовать не для проверки версии!
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.
Если я упустил какой-то способ, дайте мне знать в комментариях. С удовольствием обновлю пост и предоставлю вам заслуги.