Jedną z istotniejszych rzeczy, na które warto zwrócić uwagę pracując z PowerShellem (szczególnie na początku swojej przygody) jest jego wersja. Informacja ta jest szczególnie istotna jeżeli planujesz wykonywać skrypty zdalnie na różnych maszynach lub pracować z różnymi systemami operacyjnymi. Jak zatem poprawnie wykonać to zadanie? Za chwilę wszystko stanie się jasne. Zapraszam do zapoznania się z tym wpisem.
$PSVersionTable
Najszybszą, a zarazem najbardziej prawidłową metodą jest uruchomienie konsoli PowerShell i wpisanie $PSVersionTable
. Jest to specjalna, automatyczna zmienna, pod którą kryje się seria atrybutów.
PS C:\Users\Admin> $PSVersionTable
Name Value
---- -----
PSVersion 7.5.1
PSEdition Core
GitCommitId 7.5.1
OS Microsoft Windows 10.0.26100
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Jak możesz zauważyć mamy tutaj wersję, edycję, platformę czy jeszcze kilka innych elementów, Jednak w przypadku identyfikacji wersji interesuje nas tylko wartość PSVersion, która wskazuje na aktualną wersję PowerShella. Dlatego też w skrócie możesz posłużyć sie poleceniem $PSVersionTable.PsVersion
.
PS C:\Users\Admin> $PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 5 1
Get-Host to nie wersja PowerShella
Do niedawna uważałem, że wersję PowerShella można sprawdzić również za pomocą cmdletu Get-Host. Jak wielkie było moje zdziwienie, gdy pewnego dnia chciałem sprawdzić pewną rzecz w Visual Studio Code i wpisałem właśnie Get-Host. W wyniku uzyskałem zupełnie coś innego.
PS C:\Users\Admin\Documents\PowerShell\Scripts> Get-Host
Name : Visual Studio Code Host
Version : 2025.0.0
InstanceId : 01bc8d8f-4a1c-4228-871e-00db4bed1924
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : en-GB
CurrentUICulture : en-GB
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled : True
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
Po zagłębieniu się w temat zrozumiałem, że program powershell.exe jak i powershell_ise.exe to tylko host (gospodarz) dla docelowej instancji PowerShella. I właśnie wersję tego hosta uzyskasz cmdletem Get-Host. Co ciekawe w przypadku konsoli Windows PowerShell jak i PowerShell ISE zarówno host jak i sam PowerShell występuje w identycznej wersji, co może być trochę mylące. Dodatkowo cmdlet ten nie działa zdalnie.
Zmienna $Host
Zmienna $Host jest kolejną zmienną automatyczną, która zawiera obiekt, identyczny jak ten zwracany przez Get-Host. Ponieważ obie te metody są wymienne, nie zwracają prawidłowej wersji silnika PowerShell i nie działają zdalnie. Dlatego raczej nie zaleca się ich stosowania.
Rejestr Windows
Konsola PowerShell posiada również swoje wpisy w rejestrze sytemu. Jeden z nich a konkretnie \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine i klucz PowerShellVersion odpowiedzialny jest właśnie za wersję. Jeżeli natomiast zamiast PowerShell rozwiniesz PowerShellCore, a następnie InstalledVersions, odnajdziesz info o wersji.

Możesz również skorzystać z polecenia:
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
(Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions -ErrorAction stop | Get-ItemProperty -Name SemanticVersion ).SemanticVersion

Zdalne maszyny
W przypadku zdalnych hostów wszystkie poprzednie metody (za wyjątkiem Get-Host i $Host) zadziałają z tym, że należy dodać Invoke-Command.
Zauważ, że wykonałem polecenie w konsoli PowerShell 7, ale w odpowiedzi otrzymałem wersję 5.1, czyli wersję dla Windows PowerShell. Dzieje się tak, ponieważ domyślnie Invoke-Command zawsze łączy się ze zdalnym punktem końcowym Windows PowerShell, chyba że określi się inaczej. Wtedy do polecenia należy dodać parametr -ConfigurationName.
Źródła:
https://4sysops.com/wiki/how-to-check-the-powershell-version/