W PowerShell istnieje zillion sposobów na zrobienie tego samego (lub blisko). Z tego wpisu na blogu dowiesz się, jak sprawdzić wersję PowerShell, którą masz na komputerach lokalnych i zdalnych. Omówimy złe sposoby i zalecany przeze mnie sposób.
Jeśli chcesz przejść od nowicjusza PowerShell do guru PowerShell, polecam pożreć to ZA DARMO mini-kurs na temat tworzenia narzędzia PowerShell. To jest samouczek krok po kroku z pełnymi objaśnieniami i wskazówkami od Adama Automatora!
Istnieją strony internetowe, które pokazują różne sposoby sprawdzania wersji Powershell. Ale żaden z nich nie sporządził wyczerpującej listy wszystkich. Postanowiłem to zmienić.
Wszystkie te sposoby powinny działać zarówno w Windows PowerShell, jak i w PowerShell Core. Te metody powinny również działać w Windows PowerShell w wersji 1.0 aż do PowerShell 7.
Sposoby znalezienia używanej wersji PowerShell to:
- Właściwość
(Get-Host).Version
- Właściwość
$host.Version
- Rejestr (tylko Windows PowerShell)
-
$PSVersionTable.PSVersion
Właściwość
Przeanalizujmy wszystkie sposoby znalezienia wersji PowerShell od najmniej do najbardziej zalecanej .
Spis treści
Get-Host
PowerShell ma koncepcję znaną jako hosty. Host to program obsługujący aparat PowerShell. To nie jest sam silnik PowerShell. Konsola PowerShell lub edytor kodu ze zintegrowanym terminalem to hosty PowerShell.
Host może mieć wersję całkowicie niezależną od samego PowerShell. Może to być mylące dla wielu nowoprzybyłych. Pozwól, że ci pokażę, dlaczego.
Jeśli uruchomisz (Get-Host).Version
, zobaczysz, że zwraca on numer wersji, który wygląda, jakby mógł to być wersja silnika PowerShell. Wygląd może być mylący.
Poniżej uruchomiłem Get-Host
na Windows PowerShell 5.1 i widzisz, że wraca z 5.1.17134.858. Wygląda na to, że jest to prawdziwa wersja.
Jednak czasami po uruchomieniu Get-Host
w zintegrowanym terminalu wersja nie jest taka sama. Chociaż zwykle host będzie reprezentował tę samą wersję silnika, nie zawsze jest to konieczne.
Sprawdź wersję Powershell przez Get-Host na zdalnych komputerach
Mimo że Get-Host
wydaje się zwracać tę samą wersję po uruchomieniu na komputerze lokalnym, ale nigdy na komputerach zdalnych.
Na przykład uruchommy Get-Host
na zdalnym serwerze Windows Server 2016 za pośrednictwem Invoke-Command
i zobacz, co się stanie.
Kiedy ostatnio sprawdzałem, nie można uruchomić programu PowerShell v1 na Windows Server 2016.
Poleganie na Get-Host
to po prostu zły pomysł.
Sprawdź wersję Powershell $ host.Version polecenie
Odnośniki $host.Version
to kolejny sposób sprawdzenia wersji programu Powershell. Zmienna $host
to zmienna automatyczna, która zwraca te same dane wyjściowe co Get-Host
.
Nie ma nic specjalnego w tej metodzie. Jest to po prostu to samo, co uruchomienie Get-Host
.
$ host.Version na komputerach zdalnych
Za pomocą programu PowerShell Remoting zobaczysz $host.Version
jak będziesz prowadzić Get-Host
.
Niebezpieczeństwo, Will Robinson!
Rejestr
Jeśli nie chcesz otwierać samego programu PowerShell, możesz również sprawdzić rejestr. Wersja programu PowerShell jest schowana pod wartością w ścieżce klucza rejestru HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Ten klucz rejestru ma wartość o nazwie PowerShellVersion
, do której można się odwołać, używając Get-ItemProperty
.
Możesz zobaczyć, że wersja jest podobna, ale nie zawiera wersji, tak jak inne opcje.
Korzystanie z innych narzędzi
Korzystanie z rejestru oznacza również, że nie musisz w ogóle używać PowerShell, aby znaleźć wersja. Możesz uruchamiać polecenia z wiersza poleceń lub innego narzędzia, które może odczytać rejestr.
Rejestr na komputerach zdalnych
Rejestr jest statyczny, a wartości nie zmieniają się lokalnie ani zdalnie. Możesz być pewien, że to, co widzisz lokalnie, będzie takie samo, jak widzisz zdalnie.
Dobrze jest pokazać tę samą wersję lokalnie i zdalnie. Ale mam lepszy sposób, aby pokazać ci za pomocą automatycznej zmiennej $PSVersionTable
.
Sprawdź wersję Powershell za pomocą polecenia $ PSVersionTable.PSVersion
Ostatnią i ostatnią metodą jest odwołanie się do właściwości PSVersion
w zmiennej automatycznej $PSVersionTable
.Ta metoda zawsze będzie reprezentować silnik PowerShell.
Zmienna automatyczna $PSVersionTable
jest tabelą skrótów tylko do odczytu która zwraca informacje dotyczące konkretnie wersji engin PowerShell. Ta automatyczna zmienna nie tylko zwraca wersję, ale także PSEdition
. Ta właściwość może udostępniać dodatkowe informacje na temat uruchomionej wersji programu PowerShell w wersji Core lub Desktop.
$ PSVersionTable na zdalnych komputerach
Korzystanie z $PSVersionTable
automatyczna zmienna jest dokładna lokalnie, tak jak zdalnie. Możesz zobaczyć poniżej, że po umieszczeniu $PSVersionTable.PSVersion
w bloku skryptu i wykonaniu tego kodu na komputerze zdalnym zwróci tę samą wersję.
Podsumowanie
W tym poście na blogu poznałeś wszystkie sposoby sprawdzania wersji programu PowerShell zarówno lokalnie, jak i zdalnie. Mam nadzieję, że kilka pierwszych metod dało ci pomysł, w jaki sposób nie sprawdzać wersji!
Zalecam zawsze używanie $PSVersionTable.PSVersion
. Wszystkie inne metody mogą wyglądać podobnie do wersji silnika programu PowerShell, ale mogą nie zawsze odzwierciedlać wersję silnika.