Unikanie polecenia Write-Host jest jedną z wielu dobrych praktyk związanych z PowerShell. Sam Jeffrey Snover, twórca PowerShell nazwał je złym, szkodliwym. Taka łatka ciągnie się za Write-Host do dziś.

Pytanie, czy aby słusznie?

Po przeczytaniu będziesz wiedział, skąd to się wzięło i dlaczego niektóre zarzuty dotyczące Write-Host są nieaktualne i kiedy rozważać użycie tego polecenia.

Zły Write-Host, zły

Zastanawiałeś się, czemu wyniki polecenia Write-Host nie trafiają do pliku?

zły write-host, zły

Albo czemu wynik Write-Host nie zapisuje się do zmiennej?

Bo się nie da.

Bzdura

Tak było kiedyś. W PowerShell 5.0 postanowiono poprawić największy problem Write-Host, polegający na omijaniu strumienia wyjścia (i każdego innego) i wysyłanie wyniku bezpośrednio do „hosta”.

Wraz z PowerShell 5.0 pojawił się dodatkowy strumień informacji, z którego korzysta Write-Host. Teraz wiadomości trafiają do strumienia informacji a dopiero później na ekran.

Z pozoru tak mała zmiana, zmniejsza jego szkodliwość, ponieważ teraz możemy przekierować strumień informacji do strumienia wyjścia. Tego, czego wcześniej nie dało się zrobić.

Co to ten strumień?

PowerShell obecnie ma 6 strumieni, które służą do izolowania wiadomości odpowiednich typów. Wygląda to mniej więcej tak.

Powershell, streams, strumienie

Na przykład przekazywane obiekty w potoku korzystają ze strumienia wyjścia/sukcesu i tylko tego typu wiadomości trafią do kolejnego polecenia. Dzięki temu rozwiązaniu, błędy, ostrzeżenia, komunikaty nie zaśmiecają potoku. .

Zobacz przykład.

PowerShell, stream, strumienie, przykład

Przekierowywanie

Tak jak wspomniałem już wyżej, możemy przekierowywać wiadomości do strumienia wyjścia/sukcesu. Wykonasz to za pomocą operatora n>&1 gdzie n to numer konkretnego strumienia (lub * która oznacza wszystkie strumienie).

PowerShell, Write-Host, przekierowanie
PowerShell, Write-Host, przekierowanie, przykład

W ten sposób przekierujesz do pliku również komunikaty polecenia Write-Host, ale również Write-Error, Write-Warning, Write-Verbose itd.

Kiedy używać

Write-Host mimo „wad” ma jedną ogromną zaletę, umożliwia dostosowywanie kolorystyki zwracanych obiektów.

Jak wszyscy wiemy, kolor przykuwa naszą uwagę, kolorem jesteśmy w stanie wyróżnić to, co ważne. Dlatego w interaktywnych skryptach warto wykorzystać Write-Host i jego parametry -ForegroundColor lub -BackgroundColor.

Zobacz świetny moduł Graphical, którego działanie nie miałby sensu, gdyby nie możliwości Write-Host.

W innym przypadkach korzystaj przede wszystkim z Write-Output lub Write-Verbose.

Podsumowanie

Moim celem było abyś po przeczytaniu wpisu widział więcej na temat Write-Host i mam nadzieje, że to się udało. Chciałem również pokazać, że PowerShell się zmienia i trzeba uważać na treści które powstały kilka lat temu.

22 Najważniejsze Wskazówki Pisania Skryptów PowerShell

Mateusz Nadobnik

Zachwycony językiem skryptowym Windows PowerShell. Swoją wiedzę, doświadczenia i spostrzeżenia opisuję na blogu.

read more