Sammenlign output med lokalt output
Når du kører en kommando, f.eks. Get-Process- på din lokale computer, returnerer kommandoen objekter af typen System.Diagnostics.Process og føjer dem til Windows PowerShell-pipelinen. Disse objekter har egenskaber, metoder og ofte hændelser. Metoder giver mulighed for at udføre opgaven. Metoden Kill() for et Process-objekt afslutter f.eks. den proces, som dette objekt repræsenterer.
Seddel
Processen med at konvertere et objekt til en formular, der let kan transporteres, kaldes serialisering. Serialisering tager et objekts tilstand og transformerer det til serielt dataformat, f.eks. XML eller binært format. deserialisering konverterer de formaterede XML-data eller binære data til en objekttype.
Når en kommando kører på en fjerncomputer, serialiserer computeren resultaterne i XML og sender denne XML-tekst til computeren. Det gør du for at placere objektets oplysninger i et format, der kan overføres via et netværk. For komplekse objekter kan serialiseringsprocessen dog kun bruge statiske oplysninger om et objekt – med andre ord dets egenskaber.
Når din computer modtager XML-filen, deserialiseres den tilbage til objekter, der er placeret i Windows PowerShell-pipelinen. Når du har et process--objekt, ved at sende det til Get-Member-, ved du, at det nu er af typen Deserialized.System.Diagnostics.Process, som er en relateret, men anden objekttype. Det deserialiserede objekt har ingen metoder og ingen hændelser.
På grund af den serialisering og deserialisering, der er en del af PowerShell-remoting, bør du overveje, at alle objekter, der hentes på denne måde, er et statisk snapshot. Værdierne for objektegenskaberne kan ikke opdateres, og objekterne kan ikke bruges til at udføre handlinger. Derfor skal alle opgaver, der kræver interaktion med fjernobjekter, udføres på fjerncomputeren som en del af PowerShell-remotingsessionen.
Her er f.eks. et eksempel på en kommando, der ikke giver de ønskede resultater:
Invoke-Command –Computer LON-DC1 –ScriptBlock { Get-Process –Name Note* } |
Stop-Process
I dette eksempel henter du procesobjekter, men opgaven med at stoppe processer udføres på den lokale computer i stedet for fjerncomputeren. Dette vil resultere i, at alle lokale processer, der tilfældigvis har navne, der svarer til fjernprocesserne, stoppes.
Den korrekte måde at opnå det ønskede resultat på er at køre:
Invoke-Command –Computer LON-DC1 –ScriptBlock { Get-Process –Name Note* |
Stop-Process }
I dette tilfælde er behandlingen udelukkende sket på fjerncomputeren, hvor kun de endelige resultater serialiseres og sendes tilbage. Forskellen mellem disse to kommandoer er diskret, men vigtig at forstå.