У цій статті ми розглянемо які версії PowerShell існують, в чому відмінність Windows PowerShell від PowerShell Core і як дізнатися, яка версія PowerShell встановлена ​​на локальному або віддалених комп’ютерах.

Історія версії PowerShell, PowerShell Core

За замовчуванням PowerShell устанвлен у всіх версіях Windows, починаючи з Windows 7 SP1 і Windows Server 2008 R2 SP1. У наступній таблиці представлений список актуальних версій PowerShell:

Версія для PS Примітка
PowerShell 1.0 Можна було встановити вручну в Windows Server 2003 SP1 і Windows XP
PowerShell 2.0 Передустановлено в Windows Server 2008 R2 і Windows 7
PowerShell 3.0 Встановлено в Windows 8 і Windows Server 2012
PowerShell 4.0 Передустановлено в Windows 8.1 і Windows Server 2012 R2
PowerShell 5.0 Передустановлено в Windows 10 RTM, і автоматично оновлюється до 5.1 через Windows Update
PowerShell 5.1 Вбудований в Windows 10 (починаючи з билда 1709) і Windows Server 2016
PowerShell Core 6.0 і 6.1 Наступна кроссплатформенная версія PowerShell (заснована на .NET Core), яку можна встановити не тільки у всіх підтримуваних версіях Windows, але і в MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE
PowerShell Core 7.0 Сама остання версія PowerShell, що вийшла в березні 2020 (в новому релізі виконаний перехід з .NET Core 2.x на 3.1)

Ви можете вручну встановити новішу версію PowerShell в попередніх версіях Windows. Для цього потрібно завантажити і встановити відповідну версію Рамка управління Windows (PowerShell входить до його складу).

Варто звернути увагу, що останні 2 роки Microsoft припинила розвиток класичного Windows PowerShell (випускаються тільки виправлення помилок і безпеки) і сфокусувалася на відкритому кроссплатформенную PowerShell Core. У чому відмінності Windows PowerShell від PowerShell Core?

  • Windows PowerShell заснований на NET Framework (наприклад, для PowerShell 5 потрібно .NET Framework v4.5, потрібно переконатися що він встановлений). PowerShell Core заснований на .Net Core;
  • Windows PowerShell працює тільки на ОС сімейства Windows, а PowerShell Core є кросплатформним і буде працювати в Linux;
  • У PowerShell Core немає повної сумісності з Windows PowerShell, проте Microsoft працює на поліпшенням сумісності зі старими Командлети і скриптами (перед переходом на PowerShell Core рекомендується протестувати роботу старих PS скриптів). У PowerShell 7 забезпечується максимальна совместімсть з Windows PowerShell.
  • Редактор PowerShell ISE не можна використовувати для налагодження скриптів PowerShell Core (але можна використовувати Visual Studio Code)
  • Оскільки Windows PowerShell більш не розвивається, рекомендується поступово мігрувати на PowerShell Core.

Як дізнатися версію PowerShell з консолі?

Найпростіший спосіб визначити яка версія PowerShell у вас встановлена ​​за допомогою команди:

host

Наступний скріншот з Windows 10, в якій як і в Windows Server 2016 за замовчуванням встановлений PowerShell 5.1.

як визначити встановлену версію powershell з консолі

або

$PSVersionTable

Можна отримати тільки значенні версії:

$PSVersionTable.PSVersion.major

(В цьому прикладі ми отримали версію PSVersion 2.0 з чистого Windows Server 2008 R2)

$ PSVersionTable

команда $PSVersionTable коректно працює в PowerShell Core на різних операційних системах.

Також можна дізнатися встановлену версію PowerShell через реєстр. Для цього потрібно отримати значення параметра PowerShellVersion з гілки реєстру HKLM SOFTWARE Microsoft PowerShell 3 PowerShellEngine за допомогою Get-ItemProperty

(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell3PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

дізнатися версію powershell xthtp httcnhf

Даний спосіб працює, починаючи з Windows Server 2012 / Windows 8. У Windows Server 2008 R2 / Windows 7 потрібно отримати значення параметра реєстру в іншій гілці:

(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell1PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

версія powershell в windows server 2008r2

Для визначення встановленої версії PowerShell Core потрібно використовувати команду:

(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShellCoreInstalledVersions* -Name 'SemanticVersion').SemanticVersion

Отримуємо версію PowerShell на віддалених комп’ютерах

Для отримання версії PowerShell на віддалених комп’ютерах потрібно використовувати значення змінної оточення $ PSVersionTable або отримувати дані безпосередньо з реєстру. Інші способи можуть повертати некоректні дані.

Ви можете отримати версію PowerShell з віддаленого комп’ютера за допомогою команди Invoke-Command:

Invoke-Command -ComputerName dc01 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred
отримати версію powershell з віддаленого комп'ютера

Major Minor Build Revision PSComputerName
----- ----- ----- -------- --------------
5 1 14393 3383 dc01

Можна отримати встановлені версії PowerShell з декількох комп’ютерів таким скриптом (їх список збережений у текстовому файлі):

Invoke-Command -ComputerName (Get-Content C:PSservers.txt) -
ScriptBlock{$PSVersionTable.PSVersion} | Select PSComputerName, @{N="PS Version";E={$_.Major}}

Або можна отримати список комп’ютерів домену через Get-ADComputer і отримати версію PowerShell на них:

$adcomputer=(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -SearchBase ‘OU=servers,dc=winitpro,dc=ru’ ).Name
Invoke-Command-ComputerName $adcomputer -Scriptblock{$PSVersionTable.psversion} -ErrorAction SilentlyContinue

Якщо ваш скрипт PoweShell використовує спеціальний функціонал певної версії PS, ви можна примусово перемкнутися в режим іншою версією PowerShell. Наприклад, для запуску консолі в режимі PowerShell v3, виконайте (повинен бути встановлений .Net Framework 3.5):

PowerShell.exe -version 3

Визначення версії PowerShell може бути важливо при виконанні скриптів і запуску команд, які використовують командлети або більш доступного режиму певної версії PS. Якщо ви хочете в скрипті PS визначити яка версія PowerShell встановлена, і в залежності від цього використовувати різні командлети, ви можете використовувати такий скрипт:

$ps_version = $PSVersionTable.PSVersion.major
if ( $ps_version -eq "2” )
{
write "Вы используете Powershell 2.0"
}
elseif ( $ps_version -eq "5" )
{
write " Вы используете Powershell 5"
}

У наступній статті ми розглянемо, як оновити версію PowerShell в Windows.

Leave a Reply

Your email address will not be published. Required fields are marked *