Gegevens omleiden met Out-*-cmdlets
Windows PowerShell biedt verschillende cmdlets voor het rechtstreeks controleren van gegevensuitvoer. Deze cmdlets delen twee belangrijke kenmerken.
Eerst transformeren ze gegevens in het algemeen naar een vorm van tekst. Ze doen dit omdat ze de gegevens naar systeemonderdelen sturen waarvoor tekstinvoer is vereist. Dit betekent dat ze de objecten moeten vertegenwoordigen als tekst. Daarom wordt de tekst opgemaakt zoals u deze ziet in Windows PowerShell consolevenster.
Ten tweede gebruiken deze cmdlets de Windows PowerShell werkwoord Out, omdat ze informatie verzenden van Windows PowerShell naar een andere plaats.
Console-uitvoer (out-host)
Standaard verzendt Windows PowerShell gegevens naar het hostvenster, wat precies is wat de Out-Host cmdlet doet. Het primaire gebruik voor de Out-Host cmdlet is pagineren. De volgende opdracht gebruikt bijvoorbeeld om Out-Host de uitvoer van de Get-Command cmdlet te pagina's:
Get-Command | Out-Host -Paging
Het hostvenster wordt weergegeven buiten Windows PowerShell. Dit is belangrijk omdat wanneer gegevens worden verzonden uit Windows PowerShell, ze daadwerkelijk worden verwijderd. U kunt dit zien als u probeert een pijplijn te maken die gegevens naar het hostvenster pagina's laat pagina's maken 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 met de opdracht pagina's met procesgegevens in lijstindeling worden weergegeven. In plaats daarvan wordt de standaard tabellaire lijst 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 cmdlet verzendt de gegevens rechtstreeks naar de console, zodat de opdracht nooit iets ontvangt Out-Host Format-List om op te maken.
De juiste manier om deze opdracht te structureren, is door de cmdlet aan het einde van de pijplijn te Out-Host zetten, zoals hieronder wordt weergegeven. Dit zorgt ervoor dat de procesgegevens worden opgemaakt in een lijst voordat ze worden gepaginat 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. Er moet altijd een out-cmdlet worden weergegeven aan het einde van de pijplijn.
Notitie
Alle Out-cmdlets geven uitvoer weer als tekst, met behulp van de opmaak die van kracht is voor het consolevenster, inclusief regellengtelimieten.
Uitvoer verwijderen (out-null)
De Out-Null cmdlet is ontworpen om alle ontvangen invoer onmiddellijk te verwijderen. Dit is handig voor het verwijderen van onnodige 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
Out-NullFoutuitvoer wordt niet verwijderd door de cmdlet. Als u bijvoorbeeld de volgende opdracht opvolgt, wordt er een bericht weergegeven met de melding dat Windows PowerShell 'Is-NotACommand' niet herkent:
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
Afdrukgegevens (out-printer)
U kunt gegevens afdrukken met behulp van de Out-Printer cmdlet . De Out-Printer cmdlet gebruikt uw standaardprinter als u geen printernaam op te geven. U kunt elke Windows op basis van een printer door de weergavenaam op te geven. Er is geen enkele vorm van printerpoorttoewijzing of zelfs een echte fysieke printer nodig. Als u bijvoorbeeld de hulpprogramma's Microsoft Office voor het maken van documenten 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 (out-file)
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 C:\temp\processlist.txt verzendt:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
De resultaten van het gebruik van de cmdlet zijn mogelijk niet wat u verwacht als u gewend bent aan traditionele Out-File uitvoeromleiding. Als u het gedrag wilt begrijpen, moet u rekening houden met de context waarin de Out-File cmdlet werkt.
De Out-File cmdlet maakt standaard een Unicode-bestand. Dit is op de lange termijn de beste standaard, maar dit betekent dat hulpprogramma's die ASCII-bestanden verwachten, niet correct werken met de standaarduitvoerindeling. U kunt de standaarduitvoerindeling wijzigen in ASCII met behulp van de parameter Encoding:
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file bestandsinhoud zo opmaken dat deze eruit ziet als console-uitvoer. Dit zorgt ervoor dat de uitvoer wordt afgekapt, net zoals in een consolevenster in de meeste omstandigheden. Als u bijvoorbeeld de volgende opdracht hebt uitgevoerd:
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] ...
...
U kunt de parameter Width gebruiken om lijnbreedte op te geven om uitvoer te krijgen die geen regelte wraps forceer die overeenkomen met de breedte van het scherm. Omdat Width een parameter met een 32-bits geheel getal is, is de maximale waarde 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 op de console zou zijn weergegeven. Voor een beter beheer van de uitvoerindeling hebt u geavanceerdere hulpprogramma's nodig. We kijken naar de bewerkingen in het volgende hoofdstuk, samen met enkele details over objectmanipulatie.