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

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

Ответы [ 19 ]

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

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

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

6 голосов
/ 19 марта 2014

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

Test Powershell Version.cmd

или аналогичный.

@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
6 голосов
/ 07 февраля 2014

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

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

Нет необходимости запоминать каждую переменную. Достаточно просто Get-Variable (и «Должно быть что-то в версии»).

3 голосов
/ 19 октября 2018

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

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

if ($PSVersionTable.PSVersion.Major -eq 5) {
    #Execute code available in 5, like Compress
    Write-Host "You are running version 5"
}
else {
    #Use a different process
    Write-Host "This is version $PSVersionTable.PSVersion.Major"
}
3 голосов
/ 04 ноября 2016

Командлет, приведенный ниже, вернет версию PowerShell.

$PSVersionTable.PSVersion.Major
1 голос
/ 31 марта 2011

Вы также можете вызвать команду «host» из командной строки PowerShell. Он должен дать вам значение переменной $host.

0 голосов
/ 05 апреля 2019

Здесь так много ответов. Я думал, что поставлю свой здесь, потому что это намного короче, чем многие из этих ответов

$psMajorVer = $PSVersionTable.PSVersion.Major.ToString();$psMinorVer = $PSVersionTable.PSVersion.Minor.ToString();Write-Host "You have Powershell version " -NoNewline; Write-Host ($psMajorVer + "." + $psMinorVer);
0 голосов
/ 04 апреля 2019

Это лучший результат поиска для «Пакетный файл получить версию PowerShell», поэтому я хотел бы привести базовый пример того, как выполнить условный поток в пакетном файле в зависимости от версии 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 голосов
/ 25 января 2016

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

Get-Host | select {$_.Version}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...