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 Get-Command | 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 .