Get-Host to polecenie PowerShell zwracające informacje o bieżącej sesji, w tym numer wersji silnika PowerShell.
Get-Host jako polecenie rozpoznające bieżące środowisko
Get-Host jest wbudowanym poleceniem PowerShell typu cmdlet. Jego zadaniem jest zwrócenie obiektu reprezentującego aktualny host, czyli program lub środowisko, w którym działa bieżąca sesja PowerShell. Hostem może być między innymi konsola uruchomiona przez powershell.exe, środowisko PowerShell uruchomione przez pwsh.exe albo inne narzędzie korzystające z silnika PowerShell. Polecenie nie wyszukuje informacji o całym komputerze i nie wykonuje ogólnego skanowania systemu. Odczytuje właściwości udostępniane przez aktywny obiekt hosta.
Najprostsze uruchomienie ma postać Get-Host. Wynik jest obiektem, dlatego może zostać przekazany do innych poleceń potoku. Przykład Get-Host | Select-Object Name, Version ogranicza wyświetlane dane do nazwy hosta i jego wersji. Z kolei Get-Host | Format-List * pozwala obejrzeć wszystkie właściwości dostępne w danym środowisku. Dokładny zestaw prezentowanych informacji może zależeć od wersji PowerShell oraz od programu, który pełni funkcję hosta.
Właściwość Version a wersja silnika PowerShell
Wynik Get-Host zawiera właściwość Version, która opisuje wersję deklarowaną przez bieżący host. W typowej sesji konsolowej jej wartość często odpowiada wersji uruchomionego PowerShell, dlatego polecenie jest używane do szybkiego rozpoznania środowiska. Właściwość można odczytać bez formatowania całego obiektu: (Get-Host).Version. Dostępne składniki wersji można następnie sprawdzać tak samo jak właściwości innych obiektów .NET, na przykład przez (Get-Host).Version.Major.
Nie należy jednak utożsamiać tej wartości bezwarunkowo z wersją silnika. Host jest warstwą, z którą PowerShell komunikuje się podczas obsługi sesji, więc jego właściwości zależą od implementacji hosta. Do jednoznacznego odczytu informacji o wersji samego środowiska PowerShell służy automatyczna tabela $PSVersionTable, a szczególnie wpis $PSVersionTable.PSVersion. Przykład $PSVersionTable.PSVersion.ToString() zwraca wersję silnika w formie tekstowej. Porównanie (Get-Host).Version z $PSVersionTable.PSVersion może pomóc wykryć sytuację, w której host i silnik przedstawiają różne numery wersji.
Odczyt właściwości hosta w praktycznej sesji
Poza nazwą i wersją obiekt zwrócony przez Get-Host może udostępniać informacje dotyczące interfejsu użytkownika oraz ustawień kulturowych sesji. Wśród właściwości spotykanych w standardowym hoście znajdują się między innymi Name, Version, InstanceId, UI, CurrentCulture i CurrentUICulture. CurrentCulture określa kulturę używaną między innymi przy formatowaniu wartości, natomiast CurrentUICulture odnosi się do kultury interfejsu komunikatów. Nie każda właściwość musi mieć takie samo znaczenie w każdym hoście.
Get-Host działa w kontekście aktualnego runspace, czyli przestrzeni wykonywania poleceń PowerShell. Jeżeli polecenie zostanie uruchomione bezpośrednio w lokalnej konsoli, opisuje lokalny host tej sesji. Jeżeli zostanie wykonane wewnątrz polecenia uruchamianego zdalnie, na przykład w skrypcie przekazanym przez Invoke-Command, wynik należy interpretować w kontekście sesji zdalnej. Samo polecenie nie zmienia konfiguracji komputera, nie instaluje składników i nie naprawia problemów z PowerShellem. Służy przede wszystkim do obserwacji środowiska, w którym wykonywany jest kod.
Get-Host przy rozróżnianiu problemu środowiska
Informacje z Get-Host mogą być przydatne, gdy ten sam skrypt zachowuje się inaczej na dwóch komputerach. W takim przypadku można zapisać nazwę hosta, wartość Version oraz wynik $PSVersionTable.PSVersion, a następnie porównać je z wersją systemu, lokalizacją sesji i sposobem uruchomienia programu. Sam numer wersji nie wyjaśnia każdej różnicy, ponieważ działanie skryptu może zależeć także od dostępnych modułów, polityki wykonywania, architektury procesu oraz uprawnień. Get-Host jest więc jednym z elementów rozpoznania, a nie pełnym testem poprawności instalacji.
Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, a informacje z Get-Host mogą stanowić pomocniczy element diagnostyki problemów z lokalnym środowiskiem PowerShell. Przy analizie warto zachować dokładną treść polecenia, wynik wersji silnika z $PSVersionTable.PSVersion oraz informację, czy sesja działa w Windows PowerShell, czy w PowerShell 7. Takie rozróżnienie ogranicza ryzyko przypisania błędu niewłaściwej wersji programu i ułatwia odtworzenie warunków, w których problem występuje.