Adam the Automator (Polski)

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:

  1. Właściwość (Get-Host).Version
  2. Właściwość $host.Version
  3. Rejestr (tylko Windows PowerShell)
  4. $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.

Odniesienia $host.Version

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 output

$ 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *