Udostępnij za pośrednictwem


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 .