Как получить версию «Windows PowerShell»? `pwsh --version`, кажется, дает версию «PowerShell 7»

И в «PowerShell 7», и в «Windows PowerShell», когда я делаю pwsh --version, я получаю PowerShell 7.4.5.

Однако в «Windows PowerShell», когда я делаю Set-PSReadLineOption -PredictionSource HistoryAndPlugin [1], я получаю следующую ошибку

Set-PSReadLineOption : The prediction plugin source is not supported in this version of PowerShell. The 7.2 or a
higher version of PowerShell is required to use this source.
At line:1 char:1
+ Set-PSReadLineOption -PredictionSource HistoryAndPlugin
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-PSReadLineOption], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.SetPSReadLineOption

указывая, что «Windows PowerShell» на самом деле не находится в версии 7.4.5. Так как же мне получить актуальную версию «Windows PowerShell»?

Наличие двух PowerShell уже достаточно сбивает с толку. Похоже, что «PowerShell 7» передает состояние «Windows PowerShell», чтобы он сказал, что находится в версии 7.4.5, хотя это не так.

Есть какие-нибудь рекомендации, чтобы избежать путаницы в будущем? Должен ли я использовать исключительно PowerShell 7?


[1] команда исходит от Документация PowerShell «Использование предикторов в PSReadLine»

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

pwsh --version дает версию «PowerShell 7», хотя я назвал ее из «Windows PowerShell», но $PSVersionTable дает правильную версию:

pwsh — это имя исполняемого файла PowerShell 7. Конечно, он возвращает версию 7, потому что это версия 7. ☝🏼😉
Olaf 01.09.2024 02:44
Ответ принят как подходящий

pwsh --version

возвращает версию команды pwsh.exe , а не версию текущего CLI (интерфейса командной строки). Я предполагаю, что этот параметр взят из кроссплатформенной операционной системы Linux, см. также: Как проверить установленную версию программы?

Это означает, что pwsh --version действительно должен возвращать собственный номер версии исполняемого файла (например, PowerShell 7.4.5), даже если вы дадите эту команду из другой оболочки, как подсказывает старый добрый cmd. Точно так же, как и наоборот — использование команды cmd --version в PowerShell (или любом другом CLI) — вернет версию команды CMD:

cmd --version
Microsoft Windows [Version 10.0.19045.4780]
(c) Microsoft Corporation. All rights reserved

Как вы сами выяснили, правильный способ проверить текущую версию PowerShell — использовать команду $PSVersionTable (см. также: Определить установленную версию PowerShell):

# Windows PowerShell
$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.4780
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.4780
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Это представляет текущую версию PowerShell, соответствующую той же версии исполняемого файла (pwsh.exe), которая была первоначально запущена (возможно, с помощью ярлыка).
Это также будет показано в следующей команде, которая открывает временную оболочку (PowerShell 7.4.5) и возвращает результаты в текущей командной строке независимо от текущего CLI (версии):

pwsh -Command '$PSVersionTable'

Name                           Value
----                           -----
PSVersion                      7.4.5
PSEdition                      Core
GitCommitId                    7.4.5
OS                             Microsoft Windows 10.0.19045
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

К вашему сведению: я открыл проблему с документом, чтобы сделать pwsh --version более понятным, см.: #11373 pwsh --version

iRon 01.09.2024 10:34

Другие вопросы по теме