Dela via


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.