Přesměrování dat pomocí rutin out-*

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

Nejprve 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 se proto naformátuje tak, jak je vidíte v okně konzoly Windows PowerShell.

Za druhé tyto rutiny používají příkaz Windows PowerShell Out, protože odesílají informace z Windows PowerShell někde jinde.

Výstup konzoly (out-host)

Ve výchozím nastavení Windows PowerShell 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í. Následující příkaz například používá Out-Host stránku výstupu rutiny Get-Command :

Get-Command | Out-Host -Paging

Zobrazení okna hostitele je mimo Windows PowerShell. To je důležité, protože když se data odesílají z Windows PowerShell, skutečně se odeberou. Můžete to vidět, pokud se pokusíte vytvořit kanál, který bude obsahovat data z 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 se 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 se data procesu naformátují v seznamu před stránkou a zobrazením.

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 objevit na konci kanálu.

Poznámka

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

Zahození výstupu (Out-Null)

Rutina Out-Null je navržená tak, aby okamžitě zahodí veškerý vstup, který přijímá. To je užitečné pro zahození nepotřebných dat, která získáte jako vedlejší účinek spuštění příkazu. Když zadáte následující příkaz, z příkazu se nic nedostane:

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 informacemi o tom, že Windows PowerShell nerozpozná "Is-NotACommand":

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not 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)

Data můžete vytisknout pomocí rutiny Out-Printer . Rutina Out-Printer použije výchozí tiskárnu, pokud nezadáte název tiskárny. 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ý druh mapování portů tiskárny ani ani skutečnou fyzickou tiskárnu. Pokud máte například nainstalované nástroje pro vytváření obrázků dokumentů Microsoft Office, 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 (out-file)

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í Out-File rutiny nemusí být to, co očekáváte, pokud jste zvyklí na tradiční přesměrování výstupu. Abyste porozuměli jeho chování, musíte mít na paměti kontext, ve kterém rutina Out-File funguje.

Ve výchozím nastavení rutina Out-File vytvoří soubor Unicode. Toto je nejlepší výchozí nastavení v dlouhodobém spuštění, ale znamená to, že nástroje, které očekávají soubory ASCII, nebudou správně fungovat 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í zkrácení výstupu stejně jako ve většině okolností 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ý nevynutí zalamování čar tak, aby odpovídal šířce obrazovky, můžete pomocí parametru Width určit šířku čáry. Protože width je 32bitový celočíselnou parametr, maximální hodnota, kterou může mít, je 2147483647. Pokud chcete nastavit šířku čáry na tuto maximální hodnotu, zadejte následující:

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

Tato Out-File rutina je nejužitečnější, když chcete uložit výstup, protože by se zobrazila v konzole. Pro lepší kontrolu nad výstupním formátem potřebujete pokročilejší nástroje. Podíváme se na ně v další kapitole spolu s podrobnostmi o manipulaci s objekty.