Omdirigera data med Out-* cmdlets

Windows PowerShell innehåller flera cmdlets som gör att du kan styra datautdata direkt. Dessa cmdlets har två viktiga egenskaper.

Först omvandlar de vanligtvis data till någon form av text. De gör detta eftersom de matar ut data till systemkomponenter som kräver textinmatning. Det innebär att de måste representera objekten som text. Därför formateras texten som du ser den i Windows PowerShell konsolfönstret.

För det andra använder dessa cmdlets Windows PowerShell verbet Out eftersom de skickar information från Windows PowerShell till någon annanstans.

Konsolutdata (utgående värd)

Som standard Windows PowerShell data till värdfönstret, vilket är exakt vad Out-Host cmdleten gör. Den primära användningen för Out-Host cmdleten är växling. Följande kommando använder till exempel för att Out-Host sidindelade utdata för Get-Command cmdleten :

Get-Command | Out-Host -Paging

Visningen av värdfönstret ligger utanför Windows PowerShell. Detta är viktigt eftersom när data skickas ut Windows PowerShell tas de faktiskt bort. Du kan se detta om du försöker skapa en pipeline som sidor data till värdfönstret och sedan försöker formatera den som en lista, som du ser här:

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

Du kan förvänta dig att kommandot visar sidor med processinformation i listformat. I stället visas standardlistan i tabellform:

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

Out-HostCmdleten skickar data direkt till konsolen, så kommandot Format-List tar aldrig emot något att formatera.

Rätt sätt att strukturera det här kommandot är att placera Out-Host cmdleten i slutet av pipelinen enligt nedan. Detta gör att processdata formateras i en lista innan de s paged och visas.

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

Detta gäller för alla Out-cmdlets. En Out-cmdlet bör alltid visas i slutet av pipelinen.

Anteckning

Alla Out-cmdlet:ar återger utdata som text med hjälp av den formatering som används för konsolfönstret, inklusive radlängdsgränser.

Ta bort utdata (out-null)

Out-NullCmdleten är utformad för att omedelbart ta bort alla indata som tas emot. Detta är användbart för att ta bort onödiga data som du får som en sidoeffekt av att köra ett kommando. När du skriver följande kommando får du inget tillbaka från kommandot:

Get-Command | Out-Null

Out-NullCmdleten tar inte bort felutdata. Om du till exempel anger följande kommando visas ett meddelande om att Windows PowerShell inte känner igen "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

Skriva ut data (utskriver)

Du kan skriva ut data med hjälp av Out-Printer cmdleten . Out-PrinterCmdleten använder standardskrivaren om du inte anger ett skrivarnamn. Du kan använda valfri Windows-baserad skrivare genom att ange dess visningsnamn. Det finns inget behov av någon typ av mappning av skrivarportar eller ens en riktig fysisk skrivare. Om du till exempel har Microsoft Office avbildningsverktyg för dokument, kan du skicka data till en bildfil genom att skriva:

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

Spara data (utdatafil)

Du kan skicka utdata till en fil i stället för konsolfönstret med hjälp av Out-File cmdleten . Följande kommandorad skickar en lista över processer till filen C:\temp\processlist.txt :

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

Resultatet av att använda Out-File cmdleten kanske inte är vad du förväntar dig om du är van vid traditionell omdirigering av utdata. För att förstå dess beteende måste du vara medveten om i vilken kontext Out-File cmdleten fungerar.

Som standard skapar Out-File cmdleten en Unicode-fil. Detta är den bästa standardinställningen på lång sikt, men det innebär att verktyg som förväntar sig ATT ASCII-filer inte fungerar korrekt med standardutdataformatet. Du kan ändra standardutdataformatet till ASCII med hjälp av parametern Encoding:

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

Out-file formaterar innehållet så att det ser ut som konsolutdata. Detta gör att utdata trunkeras precis som i ett konsolfönster i de flesta fall. Om du till exempel kör följande kommando:

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

Utdata ser ut så här:

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

Om du vill hämta utdata som inte tvingar radbrytningar att matcha skärmbredden kan du använda parametern Bredd för att ange radbredd. Eftersom Width är en 32-bitars heltalsparameter är det maximala värde som det kan ha 2147483647. Ange följande för att ange linjebredden till det här högsta värdet:

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

Out-FileCmdleten är mest användbar när du vill spara utdata som den skulle ha visat i konsolen. För bättre kontroll över utdataformat behöver du mer avancerade verktyg. Vi ska titta på dem i nästa kapitel, tillsammans med viss information om objektmanipulering.