Определение установленной версии PowerShell
Как определить, какая версия PowerShell установлена на компьютере, и действительно ли она установлена вообще?
22 ответов
использовать $PSVersionTable.PSVersion
определить версию ядра. Если переменная не существует, можно с уверенностью предположить, что движок version 1.0
.
отметим, что $Host.Version
и (Get-Host).Version
не надежны - они отражают
только версия хоста, а не движок. PowerGUI,
PowerShellPLUS и т. д. являются все хостинговые приложения, и
они установят версию хоста, чтобы отразить их продукт
версия-что совершенно правильно, но не то, что вы ищете.
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
Я бы использовал либо 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
чтобы определить, установлен ли PowerShell, вы можете проверить реестр на наличие
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\Install
и
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell
и, если он существует, является ли значение 1 (для установленного), как подробно описано в блоге проверьте, установлен ли PowerShell и версия.
чтобы определить версию PowerShell, которая установлена, вы можете проверить разделы реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine\PowerShellVersion
и
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\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"}
}
вы можете посмотреть на встроенную переменную,$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
просто хочу добавить свои 2 цента здесь.
вы можете напрямую проверить версию только одной строкой, вызвав powershell внешне, например, из командной строки
powershell -Command "$PSVersionTable.PSVersion"
EDIT:
по данным @psaul вы can на самом деле есть одна команда, которая является агностиком, откуда она пришла (CMD, Powershell или Pwsh), спасибо за это.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
я протестировал, и он работал безупречно на CMD и Powershell
можно проверить, установлена ли версия Windows PowerShell, выполнив следующую проверку:
- Нажмите кнопку Пуск, выберите Все программы, аксессуары, Windows PowerShell и Windows PowerShell.
-
в консоли Windows PowerShell введите в командной строке следующую команду и нажмите клавишу Ввод:
Get-Host / Select-Object Version
вы увидите результат, который выглядит это:
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
рекомендуемый Microsoft метод прямой совместимости для проверки установки PowerShell и определения установленной версии это посмотреть на два конкретных раздела реестра. Я воспроизвел подробности здесь, на случай, если связь оборвется.
по ссылке:
в зависимости от любого другого раздела реестра или версии PowerShell.exe или расположение PowerShell.exe не гарантируется работа в долгосрочной срок.
чтобы проверить, если любой версии PowerShell установлен, проверьте следующее значение в реестре:
- Расположение:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell
- Имя Значения: Установить
- тип значения: REG_DWORD
- значение данных: 0x00000001 (1
проверить будет ли версия 1.0 или 2.0 PowerShell установлен, проверьте следующее значение в реестр:
- Расположение:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine
- Имя Значения: PowerShellVersion
- тип значения: REG_SZ
- Значение:
я нашел самый простой способ проверить, установлен ли был:
- Запустите командную строку (Start, Run,
cmd
, затем OK) - тип
powershell
затем нажмите return. Затем вы должны получить PowerShellPS
запрос:
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.
использование:
$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.
чтобы проверить, установлен ли PowerShell, используйте:
HKLM\Software\Microsoft\PowerShell Install ( = 1 )
чтобы проверить, установлен ли RC2 или RTM, используйте:
HKLM\Software\Microsoft\PowerShell PID (=89393-100-0001260-00301) -- For RC2
HKLM\Software\Microsoft\PowerShell PID (=89393-100-0001260-04309) -- For RTM
источник: этот сайт.
$host.version
просто неправильно / ненадежно. Это дает вам версию исполняемого файла хостинга (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe и т. д.) и не версия самого двигателя.
версия двигателя содержится в $psversiontable.psversion
. Для PowerShell 1.0 эта переменная не существует, поэтому, очевидно, если эта переменная недоступна, вполне безопасно предположить, что движок 1.0, очевидно.
самый простой способ забыть эту страницу и никогда не вернется к нему, чтобы узнать Get-Variable
:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
нет необходимости запоминать каждую переменную. Просто Get-Variable
достаточно (и "должно быть что-то о версии").
Так как самый полезный ответ не обратился к при наличии часть, я думал, что дам один взять на себя его с помощью быстрого и грязного решения. Он полагается на PowerShell, находящийся в пути переменные среды что, вероятно, то, что вы хотите. (Кончик шляпы к верхнему ответу, поскольку я этого не знал.) Вставьте это в текст файл и назовите его
Проверить Версию Powershell.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
вы также можете вызвать команду "host" из командной строки PowerShell. Это должно дать вам значение $host
переменной.
обычно вы получаете его, используя основное число, которое вы можете получить следующим образом:
$PSVersionTable.PSVersion.Major
использовать Get-Host чтобы получить подробную информацию о версии PowerShell:
PS C:\Users\ashash001c> Get-Host
Name : ConsoleHost
Version : 2.0
InstanceId : ##################################
UI : System.Management.Automation.Internal.Host.InternalHostUserI
nterface
CurrentCulture : en-US
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace