Przekierowywanie danych wyjściowych
Program PowerShell udostępnia kilka poleceń cmdlet, które umożliwiają bezpośrednie sterowanie danymi wyjściowymi danych. Te polecenia cmdlet mają dwie ważne cechy.
Po pierwsze, zazwyczaj przekształcają dane w jakąś formę tekstu. Robią to, ponieważ dane wyjściowe są zwracane do składników systemowych, które wymagają wprowadzania tekstu. Oznacza to, że muszą reprezentować obiekty jako tekst. W związku z tym tekst jest sformatowany w sposób widoczny w oknie konsoli programu PowerShell.
Po drugie te polecenia cmdlet używają zlecenia programu PowerShell Out , ponieważ wysyłają informacje z programu PowerShell do innego miejsca.
Dane wyjściowe konsoli
Domyślnie program PowerShell wysyła dane do okna hosta, czyli dokładnie to, co Out-Host
robi polecenie cmdlet. Podstawowym zastosowaniem Out-Host
polecenia cmdlet jest stronicowanie. Na przykład następujące polecenie używa Out-Host
polecenia , aby stronicować dane wyjściowe Get-Command
polecenia cmdlet:
Get-Command | Out-Host -Paging
Wyświetlanie okna hosta znajduje się poza programem PowerShell. Jest to ważne, ponieważ gdy dane są wysyłane z programu PowerShell, są one rzeczywiście usuwane. Możesz to zobaczyć, jeśli spróbujesz utworzyć potok, który stronicuje dane w oknie hosta, a następnie spróbuj sformatować go jako listę, jak pokazano poniżej:
Get-Process | Out-Host -Paging | Format-List
Możesz oczekiwać, że polecenie wyświetli strony informacji o procesie w formacie listy. Zamiast tego zostanie wyświetlona domyślna lista tabelaryczna:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Polecenie Out-Host
cmdlet wysyła dane bezpośrednio do konsoli, więc Format-List
polecenie nigdy nie odbiera niczego do formatu.
Prawidłowym sposobem struktury tego polecenia jest umieszczenie Out-Host
polecenia cmdlet na końcu potoku, jak pokazano poniżej. Powoduje to sformatowanie danych procesu na liście przed wyświetleniem ich na stronie.
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Dotyczy to wszystkich poleceń cmdlet Out . Polecenie cmdlet Out powinno zawsze być wyświetlane na końcu potoku.
Uwaga
Wszystkie polecenia cmdlet Out renderują dane wyjściowe jako tekst przy użyciu formatowania w oknie konsoli, w tym limitów długości wiersza.
Odrzucanie danych wyjściowych
Polecenie Out-Null
cmdlet zostało zaprojektowane tak, aby natychmiast odrzucić wszelkie odbierane dane wejściowe. Jest to przydatne w przypadku odrzucania niepotrzebnych danych, które otrzymujesz jako efekt uboczny uruchomienia polecenia. Gdy wpisz następujące polecenie, nie otrzymasz niczego z powrotem z polecenia :
Get-Command | Out-Null
Polecenie Out-Null
cmdlet nie odrzuca danych wyjściowych błędu. Jeśli na przykład wprowadzisz następujące polecenie, zostanie wyświetlony komunikat informujący o tym, że program PowerShell nie rozpoznaje polecenia Is-NotACommand
:
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
Drukowanie danych
Out-Printer
jest dostępna tylko na platformach systemu Windows.
Dane można drukować przy Out-Printer
użyciu polecenia cmdlet . Polecenie Out-Printer
cmdlet używa drukarki domyślnej, jeśli nie podajesz nazwy drukarki. Można użyć dowolnej drukarki opartej na systemie Windows, określając jej nazwę wyświetlaną. Nie ma potrzeby żadnego rodzaju mapowania portów drukarki, a nawet rzeczywistej drukarki fizycznej.
Jeśli na przykład masz zainstalowane narzędzia do tworzenia obrazów dokumentów pakietu Microsoft Office, możesz wysłać dane do pliku obrazu, wpisując:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Zapisywanie danych
Dane wyjściowe można wysyłać do pliku zamiast okna konsoli przy użyciu Out-File
polecenia cmdlet . Następujący wiersz polecenia wysyła listę procesów do pliku C:\temp\processlist.txt
:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Wyniki korzystania z Out-File
polecenia cmdlet mogą nie być oczekiwane, jeśli używasz tradycyjnego przekierowania danych wyjściowych. Aby zrozumieć jego zachowanie, należy pamiętać o kontekście, w którym Out-File
działa polecenie cmdlet.
W programie Windows PowerShell 5.1 Out-File
polecenie cmdlet tworzy plik Unicode. Niektóre narzędzia, które oczekują plików ASCII, nie działają poprawnie z domyślnym formatem danych wyjściowych. Domyślny format danych wyjściowych można zmienić na ASCII przy użyciu parametru Kodowanie :
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
formatuje zawartość pliku tak, aby wyglądała jak dane wyjściowe konsoli. Powoduje to obcięcie danych wyjściowych tak samo jak w oknie konsoli w większości przypadków. Jeśli na przykład uruchomisz następujące polecenie:
Get-Command | Out-File -FilePath c:\temp\output.txt
Dane wyjściowe będą wyglądać następująco:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Aby uzyskać dane wyjściowe, które nie wymusza zawijania linii w celu dopasowania do szerokości ekranu, możesz użyć parametru Width , aby określić szerokość linii. Ponieważ width jest 32-bitowym parametrem całkowitym, maksymalna wartość, która może mieć, jest 2147483647. Wpisz następujące polecenie, aby ustawić szerokość linii na następującą maksymalną wartość:
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
Polecenie Out-File
cmdlet jest najbardziej przydatne, gdy chcesz zapisać dane wyjściowe tak, jak to miało być wyświetlane w konsoli programu .