about_Remote_Output

Korte beschrijving

Hierin wordt beschreven hoe u de uitvoer van externe opdrachten interpreteert en formatteert.

Lange beschrijving

De uitvoer van een opdracht die op een externe computer is uitgevoerd, kan eruitzien als uitvoer van dezelfde opdracht die op een lokale computer wordt uitgevoerd, maar er zijn enkele belangrijke verschillen.

In dit onderwerp wordt uitgelegd hoe u de uitvoer kunt interpreteren, opmaken en weergeven van opdrachten die worden uitgevoerd op externe computers.

DE COMPUTERNAAM WEERGEVEN

Wanneer u de cmdlet Invoke-Command gebruikt om een opdracht uit te voeren op een externe computer, retourneert de opdracht een object dat de naam bevat van de computer die de gegevens heeft gegenereerd. De naam van de externe computer wordt opgeslagen in de eigenschap PSComputerName.

Voor veel opdrachten wordt de PSComputerName standaard weergegeven. Met de volgende opdracht wordt bijvoorbeeld een Get-Culture opdracht uitgevoerd op twee externe computers, Server01 en Server02. De uitvoer, die hieronder wordt weergegeven, bevat de namen van de externe computers waarop de opdracht is uitgevoerd.

C:\PS> invoke-command -script {get-culture} -comp Server01, Server02

LCID  Name    DisplayName                PSComputerName
----  ----    -----------                --------------
1033  en-US   English (United States)    Server01
1033  es-AR   Spanish (Argentina)        Server02

U kunt de parameter HideComputerName van Invoke-Command gebruiken om de eigenschap PSComputerName te verbergen. Deze parameter is ontworpen voor opdrachten die gegevens verzamelen van slechts één externe computer.

Met de volgende opdracht wordt een Get-Culture opdracht uitgevoerd op de externe Server01-computer. De parameter HideComputerName wordt gebruikt om de eigenschap PSComputerName en gerelateerde eigenschappen te verbergen.

C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

U kunt ook de eigenschap PSComputerName weergeven als deze niet standaard wordt weergegeven.

De volgende opdrachten gebruiken bijvoorbeeld de Format-Table cmdlet om de eigenschap PSComputerName toe te voegen aan de uitvoer van een externe Get-Date opdracht.

$dates = invoke-command -script {get-date} -computername Server01, Server02
$dates | format-table DateTime, PSComputerName -auto

DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

DE EIGENSCHAP MACHINENAME WEERGEVEN

Verschillende cmdlets, waaronder Get-Process, Get-Service en Get-EventLog, hebben een ComputerName-parameter waarmee de objecten op een externe computer worden opgehaald. Deze cmdlets gebruiken geen externe communicatie van PowerShell, dus u kunt ze zelfs gebruiken op computers die niet zijn geconfigureerd voor externe communicatie in Windows PowerShell.

De objecten die deze cmdlets retourneren, slaan de naam van de externe computer op in de eigenschap MachineName. (Deze objecten hebben geen psComputerName-eigenschap.)

Met deze opdracht wordt bijvoorbeeld het PowerShell-proces op externe computers van Server01 en Server02 uitgevoerd. De standaardweergave bevat niet de eigenschap MachineName.

C:\PS> get-process PowerShell -computername server01, server02

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
920      38    97524     114504   575     9.66   2648 PowerShell
194       6    24256      32384   142            3020 PowerShell
352      27    63472      63520   577     3.84   4796 PowerShell

U kunt de cmdlet Format-Table gebruiken om de eigenschap MachineName van de procesobjecten weer te geven.

Met de volgende opdracht worden bijvoorbeeld de processen opgeslagen in de $p variabele en wordt vervolgens een pijplijnoperator (|) gebruikt om de processen in $p naar de opdracht Format-Table te verzenden. De opdracht gebruikt de eigenschapsparameter van Format-Table om de eigenschap MachineName op te nemen in de weergave.

C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto

Id ProcessName MachineName
-- ----------- -----------
2648 PowerShell  Server02
3020 PowerShell  Server01
4796 PowerShell  Server02

Met de volgende complexere opdracht wordt de eigenschap MachineName toegevoegd aan de standaardweergave van het proces. Er worden hashtabellen gebruikt om berekende eigenschappen op te geven. Gelukkig hoeft u het niet te begrijpen om het te gebruiken.

(Houd er rekening mee dat de backtick ['] het vervolgteken is.)

C:\PS> $p = get-process PowerShell -comp Server01, Server02

C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={int}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{Label="CPU(s)";Expression={if ($.CPU -ne $()){ $.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto

Handles NPM(K) PM(K)  WS(K) VM(M) CPU(s)   Id ProcessName MachineName
------- ------ -----  ----- ----- ------   -- ----------- -----------
920     38 97560 114532   576        2648 PowerShell  Server02
192      6 24132  32028   140        3020 PowerShell  Server01
438     26 48436  59132   565        4796 PowerShell  Server02

GEDESERIALISEERDE OBJECTEN

Wanneer u externe opdrachten uitvoert die uitvoer genereren, wordt de opdrachtuitvoer via het netwerk teruggestuurd naar de lokale computer.

Omdat de meeste live Microsoft-.NET Framework-objecten (zoals de objecten die PowerShell-cmdlets retourneren) niet via het netwerk kunnen worden verzonden, worden de live-objecten geserialiseerd. Met andere woorden, de live-objecten worden geconverteerd naar XML-weergaven van het object en de eigenschappen ervan. Vervolgens wordt het op XML gebaseerde geserialiseerde object verzonden via het netwerk.

Op de lokale computer ontvangt PowerShell het op XML gebaseerde geserialiseerde object en 'deserializeert' het door het XML-object te converteren naar een standaard-.NET Framework-object.

Het gedeserialiseerde object is echter geen live-object. Het is een momentopname van het object op het moment dat het is geserialiseerd en bevat eigenschappen, maar geen methoden. U kunt deze objecten gebruiken en beheren in PowerShell, inclusief het doorgeven ervan in pijplijnen, het weergeven van geselecteerde eigenschappen en het opmaken ervan.

De meeste gedeserialiseerde objecten worden automatisch opgemaakt voor weergave door vermeldingen in de bestanden Types.ps1xml of Format.ps1xml. De lokale computer heeft echter mogelijk geen opmaakbestanden voor alle gedeserialiseerde objecten die zijn gegenereerd op een externe computer. Wanneer objecten niet zijn opgemaakt, worden alle eigenschappen van elk object weergegeven in de console in een streaminglijst.

Wanneer objecten niet automatisch worden opgemaakt, kunt u de opmaak-cmdlets, zoals Format-Table of Opmaaklijst, gebruiken om geselecteerde eigenschappen op te maken en weer te geven. U kunt ook de Out-GridView cmdlet gebruiken om de objecten in een tabel weer te geven.

Als u een opdracht uitvoert op een externe computer die gebruikmaakt van cmdlets die u niet op uw lokale computer hebt, zijn de objecten die de opdracht retourneert mogelijk niet goed opgemaakt omdat u niet over de opmaakbestanden voor deze objecten op uw computer beschikt. Als u opmaakgegevens van een andere computer wilt ophalen, gebruikt u de cmdlets Get-FormatData en Export-FormatData.

Sommige objecttypen, zoals DirectoryInfo-objecten en GUID's, worden terug geconverteerd naar live-objecten wanneer ze worden ontvangen. Deze objecten hebben geen speciale verwerking of opmaak nodig.

DE RESULTATEN ORDENEN

De volgorde van de computernamen in de parameter ComputerName van cmdlets bepaalt de volgorde waarin PowerShell verbinding maakt met de externe computers. De resultaten worden echter weergegeven in de volgorde waarin de lokale computer ze ontvangt, wat mogelijk een andere volgorde is.

Als u de volgorde van de resultaten wilt wijzigen, gebruikt u de cmdlet Sort-Object. U kunt sorteren op de eigenschap PSComputerName of MachineName. U kunt ook sorteren op een andere eigenschap van het object, zodat de resultaten van verschillende computers worden afgewisseld.

Zie ook