Uitvoer omleiden

PowerShell biedt verschillende cmdlets waarmee u gegevensuitvoer rechtstreeks kunt beheren. Deze cmdlets delen twee belangrijke kenmerken.

Eerst transformeren ze gegevens in een bepaalde vorm van tekst. Ze doen dit omdat ze de gegevens uitvoeren naar systeemonderdelen waarvoor tekstinvoer is vereist. Dit betekent dat ze de objecten als tekst moeten vertegenwoordigen. Daarom wordt de tekst opgemaakt zoals u deze ziet in het PowerShell-consolevenster.

Ten tweede gebruiken deze cmdlets het PowerShell-werkwoord Uit omdat ze informatie uit PowerShell naar een andere locatie verzenden.

Console-uitvoer

PowerShell verzendt standaard gegevens naar het hostvenster. Dit is precies wat de Out-Host cmdlet doet. Het primaire gebruik voor de Out-Host cmdlet is paging. Met de volgende opdracht wordt Out-Host bijvoorbeeld de uitvoer van de Get-Command cmdlet weergegeven:

Get-Command | Out-Host -Paging

De weergave van het hostvenster valt buiten PowerShell. Dit is belangrijk omdat wanneer gegevens worden verzonden uit PowerShell, deze daadwerkelijk worden verwijderd. U kunt dit zien als u probeert een pijplijn te maken die gegevens naar het hostvenster pagina's bevat en deze vervolgens probeert op te maken als een lijst, zoals hier wordt weergegeven:

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

U kunt verwachten dat de opdracht pagina's met procesinformatie in lijstindeling weergeeft. In plaats daarvan wordt de standaardlijst in tabelvorm weergegeven:

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

De Out-Host cmdlet verzendt de gegevens rechtstreeks naar de console, zodat de Format-List opdracht nooit iets ontvangt om op te maken.

De juiste manier om deze opdracht te structuren, is door de Out-Host cmdlet aan het einde van de pijplijn te plaatsen, zoals hieronder wordt weergegeven. Hierdoor worden de procesgegevens opgemaakt in een lijst voordat ze worden gepagineerd en weergegeven.

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

Dit geldt voor alle Out-cmdlets . Aan het einde van de pijplijn moet altijd een Out-cmdlet worden weergegeven.

Notitie

Alle Out-cmdlets geven uitvoer weer als tekst, met behulp van de opmaak die van kracht is voor het consolevenster, inclusief regellengtelimieten.

Uitvoer negeren

De Out-Null cmdlet is ontworpen om alle invoer die wordt ontvangen onmiddellijk te negeren. Dit is handig voor het negeren van overbodige gegevens die u krijgt als neveneffect van het uitvoeren van een opdracht. Wanneer u de volgende opdracht typt, krijgt u niets terug van de opdracht:

Get-Command | Out-Null

De Out-Null cmdlet negeert de foutuitvoer niet. Als u bijvoorbeeld de volgende opdracht invoert, wordt er een bericht weergegeven met de mededeling dat PowerShell het volgende niet herkent 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

Gegevens afdrukken

Out-Printer is alleen beschikbaar op Windows-platforms.

U kunt gegevens afdrukken met behulp van de Out-Printer cmdlet. De Out-Printer cmdlet gebruikt uw standaardprinter als u geen printernaam opgeeft. U kunt elke windows-printer gebruiken door de weergavenaam op te geven. Er is geen enkele vorm van printerpoorttoewijzing of zelfs een echte fysieke printer nodig. Als u bijvoorbeeld de microsoft Office-hulpprogramma's voor document imaging hebt geïnstalleerd, kunt u de gegevens naar een afbeeldingsbestand verzenden door het volgende te typen:

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

Gegevens opslaan

U kunt uitvoer verzenden naar een bestand in plaats van het consolevenster met behulp van de Out-File cmdlet. Met de volgende opdrachtregel wordt een lijst met processen naar het bestand verzonden C:\temp\processlist.txt:

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

De resultaten van het gebruik van de Out-File cmdlet zijn mogelijk niet wat u verwacht als u gewend bent aan traditionele uitvoeromleiding. Als u het gedrag ervan wilt begrijpen, moet u rekening houden met de context waarin de Out-File cmdlet werkt.

In Windows PowerShell 5.1 maakt de Out-File cmdlet een Unicode-bestand. Sommige hulpprogramma's, die ASCII-bestanden verwachten, werken niet correct met de standaarduitvoerindeling. U kunt de standaarduitvoerindeling wijzigen in ASCII met behulp van de coderingsparameter:

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

Out-file hiermee wordt bestandsinhoud opgemaakt zodat deze eruitziet als console-uitvoer. Dit zorgt ervoor dat de uitvoer in de meeste gevallen wordt afgekapt, net zoals in een consolevenster. Als u bijvoorbeeld de volgende opdracht uitvoert:

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

De uitvoer ziet er als volgt uit:

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

Als u uitvoer wilt ophalen die niet afdwingen dat lijnterugloop overeenkomt met de schermbreedte, kunt u de parameter Breedte gebruiken om de lijnbreedte op te geven. Omdat Width een 32-bits geheel getalparameter is, is de maximumwaarde die deze kan hebben 2147483647. Typ het volgende om de lijnbreedte in te stellen op deze maximumwaarde:

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

De Out-File cmdlet is het handigst wanneer u uitvoer wilt opslaan zoals deze zou worden weergegeven op de console.