Přesměrování výstupu

PowerShell poskytuje několik rutin, které umožňují přímo řídit výstup dat. Tyto rutiny sdílejí dvě důležité charakteristiky.

Za prvé, obvykle transformují data na nějakou formu textu. Dělají to, protože vypíše data do systémových komponent, které vyžadují textové zadání. To znamená, že musí představovat objekty jako text. Text je proto naformátovaný tak, jak ho vidíte v okně konzoly PowerShellu.

Za druhé tyto rutiny používají příkaz PowerShell Out , protože odesílají informace z PowerShellu do jiného prostředí.

Výstup konzoly

PowerShell ve výchozím nastavení odesílá data do okna hostitele, což je přesně to, co rutina Out-Host dělá. Primárním použitím rutiny Out-Host je stránkování. Například následující příkaz slouží Out-Host ke stránkování výstupu rutiny Get-Command :

Get-Command | Out-Host -Paging

Zobrazení okna hostitele je mimo PowerShell. To je důležité, protože když se data odesílají z PowerShellu, skutečně se odeberou. Můžete to vidět, pokud se pokusíte vytvořit kanál, který bude stránkovat data do okna hostitele, a pak se ho pokusíte naformátovat jako seznam, jak je znázorněno tady:

Get-Process | Out-Host -Paging | Format-List

Můžete očekávat, že příkaz zobrazí stránky informací o procesu ve formátu seznamu. Místo toho zobrazí výchozí tabulkový seznam:

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

Rutina Out-Host odesílá data přímo do konzoly, takže Format-List příkaz nikdy neobdrží nic k formátování.

Správným způsobem, jak tento příkaz strukturovat, je umístit rutinu Out-Host na konec kanálu, jak je znázorněno níže. To způsobí, že data procesu se před stránkou a zobrazením naformátují v seznamu.

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

To platí pro všechny rutiny Out . Rutina Out by se měla vždy zobrazovat na konci kanálu.

Poznámka:

Všechny rutiny Out vykreslují výstup jako text s použitím formátování v okně konzoly, včetně limitů délky řádků.

Zahození výstupu

Rutina Out-Null je navržená tak, aby okamžitě zahodí všechny vstupy, které obdrží. To je užitečné pro zahození nepotřebných dat, která získáte jako vedlejší efekt spuštění příkazu. Když zadáte následující příkaz, z příkazu se nic nevrátí:

Get-Command | Out-Null

Rutina Out-Null nezahodí výstup chyby. Pokud například zadáte následující příkaz, zobrazí se zpráva s informací, že PowerShell nerozpozná 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

Tisk dat

Out-Printer je k dispozici pouze na platformách Windows.

Data můžete vytisknout pomocí rutiny Out-Printer . Pokud nezadáte název tiskárny, použije rutina Out-Printer výchozí tiskárnu. Libovolnou tiskárnu založenou na systému Windows můžete použít zadáním jejího zobrazovaného názvu. Není potřeba žádné mapování portů tiskárny ani skutečné fyzické tiskárny. Pokud máte například nainstalované systém Microsoft Office nástroje pro vytváření imagí dokumentů, můžete data odeslat do souboru obrázku zadáním:

Get-Command Get-Command | Out-Printer -Name 'Microsoft Office Document Image Writer'

Ukládání dat

Výstup můžete odeslat do souboru místo okna konzoly pomocí rutiny Out-File . Následující příkazový řádek odešle do souboru C:\temp\processlist.txtseznam procesů:

Get-Process | Out-File -FilePath C:\temp\processlist.txt

Výsledky použití rutiny Out-File nemusí být to, co očekáváte, pokud jste zvyklí na tradiční přesměrování výstupu. Abyste pochopili jeho chování, musíte mít na paměti kontext, ve kterém rutina Out-File funguje.

V okně PowerShell 5.1 rutina Out-File vytvoří soubor Unicode. Některé nástroje, které očekávají soubory ASCII, nefungují správně s výchozím výstupním formátem. Výchozí výstupní formát můžete změnit na ASCII pomocí parametru Kódování :

Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file formátuje obsah souboru tak, aby vypadal jako výstup konzoly. To způsobí, že se výstup ve většině okolností zkrátí stejně jako v okně konzoly. Pokud například spustíte následující příkaz:

Get-Command | Out-File -FilePath c:\temp\output.txt

Výstup bude vypadat takto:

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

Pokud chcete získat výstup, který nevynucuje zalamování řádků tak, aby odpovídaly šířce obrazovky, můžete zadat šířku čáry pomocí parametru Width . Protože Width je 32bitový celočíselnou parametr, maximální hodnota, kterou může mít, je 2147483647. Zadáním následujícího příkazu nastavte šířku čáry na tuto maximální hodnotu:

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

Rutina Out-File je nejužitečnější, když chcete uložit výstup tak, jak by se zobrazila v konzole.