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