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 -Name Get-* | 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.txt
seznam 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.