22 ответов:
использовать
$PSVersionTable.PSVersionдля определения версии двигателя. Если переменная не существует, то можно с уверенностью предположить, что движок version1.0.отметим, что
$Host.Versionи(Get-Host).Versionне надежны - они отражают только версия хоста, а не движка. Подергивай, PowerShellPLUS, etc. являются ли все хостинговые приложения, и они установят версию хоста, чтобы отразить их продукт версия-это совершенно правильно, но не то, что вы ищете.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\PowerShellVersionTo определите версию 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 вы можете на самом деле есть одна команда, которая является агностической, откуда она пришла (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.0http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
рекомендуемый Microsoft вперед совместимый метод для проверки, если PowerShell установлен и определения установленной версии это посмотреть на два конкретных раздела реестра. Я воспроизвел детали здесь в случае разрыва связи.
по ссылке:
в зависимости от других разделов реестра или версии PowerShell.exe или расположение PowerShell.exe не гарантирует работу в течение длительного времени срок.
чтобы проверить, если любой версии из PowerShell установлен, проверьте следующее значение в реестре:
- Расположение:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell- Имя Значения: Install
- тип значения: REG_DWORD
- значение данных: 0x00000001 (1
проверить будет ли версия 1.0 или 2.0 из PowerShell установлен, проверьте следующее значение в реестр:
- Расположение:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine- Имя Значения: PowerShellVersion
- тип значения: REG_SZ
- Значение:
я нашел самый простой способ проверить, если установлено было:
- Запустите командную строку (Start, Run,
cmdОК)- тип
powershellзатем нажмите кнопку возврата. Затем вы должны получить 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.отлично, 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переменной.
попробуйте с помощью следующей команды:
Get-Hostвидел здесь
использовать Get-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

Comments