about_Remote_Output

Kort beskrivning

Beskriver hur du tolkar och formaterar utdata från fjärrkommandon.

Lång beskrivning

Utdata från ett kommando som kördes på en fjärrdator kan se ut som utdata från samma kommando som körs på en lokal dator, men det finns några betydande skillnader.

Det här avsnittet beskriver hur du tolkar, formaterar och visar utdata från kommandon som körs på fjärrdatorer.

VISA DATORNAMNET

När du använder cmdleten Invoke-Command för att köra ett kommando på en fjärrdator returnerar kommandot ett -objekt som innehåller namnet på den dator som genererade data. Fjärrdatornamnet lagras i egenskapen PSComputerName.

För många kommandon visas PSComputerName som standard. Följande kommando kör till exempel ett Get-Culture kommando på två fjärrdatorer, Server01 och Server02. Utdata, som visas nedan, innehåller namnen på de fjärrdatorer som kommandot kördes på.

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

Du kan använda parametern HideComputerName för Invoke-Command för att dölja egenskapen PSComputerName. Den här parametern är utformad för kommandon som endast samlar in data från en fjärrdator.

Följande kommando kör ett Get-Culture-kommando på server01-fjärrdatorn. Den använder parametern HideComputerName för att dölja egenskapen PSComputerName och relaterade egenskaper.

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

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

Du kan också visa egenskapen PSComputerName om den inte visas som standard.

Följande kommandon använder till exempel cmdleten Format-Table för att lägga till egenskapen PSComputerName i utdata från ett fjärrkommando Get-Date.

$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

VISA EGENSKAPEN MACHINENAME

Flera cmdletar, inklusive Get-Process, Get-Service och Get-EventLog, har en ComputerName-parameter som hämtar objekten på en fjärrdator. Dessa cmdletar använder inte PowerShell-fjärrkommunikation, så du kan använda dem även på datorer som inte har konfigurerats för fjärrkommunikation i Windows PowerShell.

De objekt som dessa cmdletar returnerar lagrar namnet på fjärrdatorn i egenskapen MachineName. (Dessa objekt har ingen PSComputerName-egenskap.)

Det här kommandot hämtar till exempel PowerShell-processen på fjärrdatorerna Server01 och Server02. Standardvisningen inkluderar inte egenskapen 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

Du kan använda cmdleten Format-Table för att visa machineName-egenskapen för processobjekten.

Följande kommando sparar till exempel processerna i variabeln $p och använder sedan en pipelineoperator (|) för att skicka processerna i $p till kommandot Format-Table. Kommandot använder egenskapsparametern för Format-Table för att inkludera egenskapen MachineName i visningen.

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

Följande mer komplexa kommando lägger till egenskapen MachineName i standardprocessvisningen. Den använder hash-tabeller för att ange beräknade egenskaper. Lyckligtvis behöver du inte förstå det för att använda det.

(Observera att backticken ['] är fortsättningstecknet.)

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

AVSERIALISERADE OBJEKT

När du kör fjärrkommandon som genererar utdata skickas kommandoutdata över nätverket tillbaka till den lokala datorn.

Eftersom de flesta levande Microsoft-.NET Framework-objekt (till exempel de objekt som PowerShell-cmdletar returnerar) inte kan överföras via nätverket, är de levande objekten "serialiserade". Med andra ord konverteras de levande objekten till XML-representationer av objektet och dess egenskaper. Sedan överförs det XML-baserade serialiserade objektet över nätverket.

På den lokala datorn tar PowerShell emot det XML-baserade serialiserade objektet och "deserialiserar" det genom att konvertera det XML-baserade objektet till ett standardobjekt .NET Framework.

Det avserialiserade objektet är dock inte ett live-objekt. Det är en ögonblicksbild av objektet när det serialiserades och innehåller egenskaper men inga metoder. Du kan använda och hantera dessa objekt i PowerShell, inklusive att skicka dem i pipelines, visa valda egenskaper och formatera dem.

De flesta avserialiserade objekt formateras automatiskt för visning av poster i filerna Types.ps1xml eller Format.ps1xml. Den lokala datorn kanske dock inte har formateringsfiler för alla de avserialiserade objekt som genererades på en fjärrdator. När objekt inte är formaterade visas alla egenskaper för varje objekt i konsolen i en strömningslista.

När objekt inte formateras automatiskt kan du använda formaterings-cmdletar, till exempel Format-Table eller Format-List, för att formatera och visa valda egenskaper. Du kan också använda cmdleten Out-GridView för att visa objekten i en tabell.

Om du kör ett kommando på en fjärrdator som använder cmdletar som du inte har på den lokala datorn kanske objekten som kommandot returnerar inte formateras korrekt eftersom du inte har formateringsfilerna för objekten på datorn. Om du vill hämta formateringsdata från en annan dator använder du cmdletarna Get-FormatData och Export-FormatData.

Vissa objekttyper, till exempel DirectoryInfo-objekt och GUID,konverteras tillbaka till levande objekt när de tas emot. Dessa objekt behöver ingen särskild hantering eller formatering.

ORDNA RESULTATET

Ordningen på datornamnen i parametern ComputerName för cmdlets avgör i vilken ordning PowerShell ansluter till fjärrdatorerna. Resultaten visas dock i den ordning som den lokala datorn tar emot dem, vilket kan vara en annan ordning.

Om du vill ändra resultatordningen använder du cmdleten Sort-Object. Du kan sortera efter egenskapen PSComputerName eller MachineName. Du kan också sortera på en annan egenskap för objektet så att resultatet från olika datorer varvat.

Se även