Omdirigera utdata
PowerShell innehåller flera cmdletar som gör att du kan styra datautdata direkt. Dessa cmdletar har två viktiga egenskaper.
För det första 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 PowerShell-konsolfönstret.
För det andra använder dessa cmdletar PowerShell-verbet Out eftersom de skickar information från PowerShell till någon annanstans.
Konsolutdata
Som standard skickar PowerShell data till värdfönstret, vilket är exakt vad cmdleten Out-Host
gör. Den primära användningen för cmdleten Out-Host
är växling. Följande kommando använder Out-Host
till exempel för att visa utdata från cmdleten Get-Command
:
Get-Command | Out-Host -Paging
Visning av värdfönster ligger utanför PowerShell. Detta är viktigt eftersom när data skickas från PowerShell tas de faktiskt bort. Du kan se detta om du försöker skapa en pipeline som skickar 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 för tabell:
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
...
Cmdleten Out-Host
skickar data direkt till konsolen, så Format-List
kommandot tar aldrig emot något att formatera.
Det rätta sättet att strukturera det här kommandot är att placera cmdleten Out-Host
i slutet av pipelinen enligt nedan. Detta gör att processdata formateras i en lista innan de bläddras 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-cmdletar . En Out-cmdlet bör alltid visas i slutet av pipelinen.
Kommentar
Alla Ut-cmdletar renderar utdata som text med hjälp av den formatering som gäller för konsolfönstret, inklusive gränser för radlängd.
Ta bort utdata
Cmdleten Out-Null
ä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 bieffekt 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
Cmdleten Out-Null
tar inte bort felutdata. Om du till exempel anger följande kommando visas ett meddelande som informerar dig om att PowerShell inte känner igen 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
Skriva ut data
Out-Printer
är endast tillgängligt på Windows-plattformar.
Du kan skriva ut data med hjälp av cmdleten Out-Printer
. Cmdleten Out-Printer
använder standardskrivaren om du inte anger något 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 installerat Microsoft Office-dokumentavbildningsverktygen kan du skicka data till en bildfil genom att skriva:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Spara data
Du kan skicka utdata till en fil i stället för konsolfönstret med hjälp av cmdleten Out-File
. 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 cmdleten Out-File
kanske inte är vad du förväntar dig om du är van vid traditionell utdataomdirigering. För att förstå dess beteende måste du vara medveten om den kontext där cmdleten Out-File
fungerar.
I Windows PowerShell 5.1 skapar cmdleten Out-File
en Unicode-fil. Vissa verktyg, som förväntar sig ASCII-filer, fungerar inte korrekt med standardutdataformatet. Du kan ändra standardutdataformatet till ASCII med hjälp av kodningsparametern :
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
formaterar filinnehå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 högsta värdet det kan ha 2147483647. Ange följande för att ange radbredden till det här maximala värdet:
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
Cmdleten Out-File
är mest användbar när du vill spara utdata som den skulle ha visat i konsolen.