Jaka jest różnica między Write-Host i Write-Output w PowerShell?
Lubić...
Write-Host "Hello World ";
Write-Output "Hello World";
Jaka jest różnica między Write-Host i Write-Output w PowerShell?
Lubić...
Write-Host "Hello World ";
Write-Output "Hello World";
Odpowiedzi:
Krótko mówiąc, Write-Host
pisze do samej konsoli. Pomyśl o tym jak o MsgBox w VBScript . Write-Output
z drugiej strony zapisuje do potoku, więc następne polecenie może zaakceptować to jako swoje dane wejściowe. Nie musisz używać go Write-Output
do pisania obiektów, jak Write-Output
jest to dla ciebie domniemane.
PS> Get-Service
byłby taki sam jak:
PS> Get-Service | Write-Output
Write-Output wysyła dane wyjściowe do potoku. Stamtąd można go przesłać potokiem do innego polecenia cmdlet lub przypisać do zmiennej. Write-Host wysyła go bezpośrednio do konsoli.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Wyjścia:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Jeśli nie powiesz Powershell, co zrobić z wyjściem do potoku, przypisując go do zmiennej lub przesyłając go do innego polecenia, zostanie on wysłany do out-default, którym jest zwykle konsola, więc wynik końcowy wygląda tak samo .
Write-Output
przesyła dane jako obiekt przez potok. W przykładzie z pytaniami po prostu przekaże ciąg.
write-host
zależy od hosta. W konsoli write-host
zasadniczo robi [console]::WriteLine
. Zobacz to, aby uzyskać więcej informacji.
Write-Ouput
wysyła przedmioty. Tym razem był to ciąg znaków, ale generalnie wysyła obiekty i zwykle nie jest potrzebny, ponieważ jest to domyślny sposób wyświetlania wyników / danych :)
Kolejna różnica między Write-Host i Write-Output:
Write-Host wyświetla komunikat na ekranie, ale nie zapisuje go w dzienniku
Write-Output zapisuje komunikat w dzienniku, ale nie wyświetla go na ekranie.
A Write-Host jest uważany za szkodliwy. Szczegółowe wyjaśnienie można znaleźć w artykule Write-Host Consented Consented Harmful .
Write-Output
wyświetla komunikat na ekranie, jeśli sam uruchamiasz skrypt. Nie jestem więc pewien, co masz na myśli, mówiąc „Write-Output zapisuje komunikat w dzienniku, ale nie wyświetla go na ekranie”. ?
Możesz zrozumieć różnicę między dwoma cmds z poniższego przykładu:
Write-host "msgtxt" | Get-Service Po uruchomieniu powyżej otrzymasz wynik jako "msgtxt"
Zapis-wyjście "msgtxt" | Get-Service Po uruchomieniu powyżej pojawi się błąd, ponieważ msgtxt nie jest nazwą żadnej usługi (w idealnym stanie) (ponieważ zapisujesz go do potoku i jest przekazywany jako dane wejściowe do Get-Service)