Powershell: Write-Host, Write-Warning i inne polecenia z serii…

28-sty-2019

Zacznijmy od tego co to jest host. Jeśli administrujesz systemami, to pewnie hostem nazywasz komputer: „pingować hosta”, „logować się do hosta” itp. W przypadku powershella host to nie komputer, tylko program jakim łączysz sie do powrshella. Stąd też np polecenie

Get-Host zwraca np wersję programu jakim się łączysz do powershella, a $PSVersionTable zwraca wersję powershella 🙂

Polecenie Write-Host ma na zadanie wyświetlić tekst na hoście. Możesz go wyświetlać na kolorowo (masz opcje -ForegroundColor, -Backgroundcolor). Te komunikaty są zazwyczaj ładne,… a czasami odpustowe 🙂

Polecenie Write-Warning nie ma opcji zmieniających kolorki. Należy go używać do wyświetlania na wyjściu diagnostycznym (którym domyślnie jest host) właśnie ostrzeżeń. Czy w Polce, czy w Japonii, jak skrypter powershella zobaczy pomarańczowy komunikat, to będzie wiedział, że to ostrzeżenie.

Mamy też Write-Error – polecenie wyświetlające i zgłaszające błąd.

Oprócz tego są też inne wyspecjalizowane polecenia:

PS C:\Users\rafal> Get-command -verb write

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Write-Debug                                        3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Error                                        3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-EventLog                                     3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Write-Host                                         3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Information                                  3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Output                                       3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Progress                                     3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Verbose                                      3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Write-Warning                                      3.1.0.0    Microsoft.PowerShell.Utility

Niektóre z tych poleceń cokolwiek wyświetlą tylko jeżeli są spełnione określone warunki. Np. Write-Verbose (tzw. tryb gadatliwy domyślnie nie działa):

PS C:\Users\rafal> Write-Verbose "Starting copy..."

Dopiero kiedy zmienisz wartość zmiennej globalnej $VerbosePreference na „Continue”, to coś się wyświetli

PS C:\Users\rafal> Write-Verbose "Starting copy..."
VERBOSE: Starting copy...

W tym akurat przypadku cel jest taki, że na etapie pisania skryptu poleceniem tym można wyświetlać mnóstwo dodatkowych  komunikatów diagnostycznych. Kiedy jednak skrypt trafi na środowisko produkcyjne, to tam zmienna $VerbosePreference” jest ustawiona na domyślną wartość „SilentlyContinue” i tam polecenie Write-Verbose nie będzie nic wyświetlać.

Więcej o zmiennych preferencyjnych, do których należy między innymi $PreferenceVariable znajdziesz tu:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6

Komentarze są wyłączone

Autor: Rafał Kraik