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.