Compare-Object

Modul: Microsoft.PowerShell.Utility

Sammenligner to sæt objekter.

Syntaks

Compare-Object <PSObject> <PSObject> >] 

Beskrivelse

Cmdletten Compare-Object sammenligner to sæt objekter. Det ene sæt objekter er referencen,og det andet sæt objekter er forskellen.

Compare-Object kontrollerer, om der findes tilgængelige metoder til sammenligning af et helt objekt. Hvis den ikke kan finde en egnet metode, kalder den ToString()-metoderne for inputobjekterne og sammenligner stringresultaterne. Du kan angive en eller flere egenskaber, der skal bruges til sammenligning. Når der angives egenskaber, sammenligner cmdlet’en kun værdierne for disse egenskaber.

Resultatet af sammenligningen angiver, om en egenskabsværdi kun optrådte i referenceobjektet (<=) eller kun i differenceobjektet (=>). Hvis parameteren IncludeEqual anvendes, (==) angiver, at værdien findes i begge objekter.

Hvis reference- eller differenceobjekterne er nul ($null), genererer Compare-Object en afslutningsfejl.

I nogle eksempler anvendes splatting for at reducere linjelængden i kodeeksemplerne. Du kan finde flere oplysninger under Om_Splatting.

Eksempler

Eksempel 1 – Sammenligning af indholdet af to tekstfiler

Dette eksempel sammenligner indholdet af to tekstfiler. Eksemplet bruger følgende to tekstfiler,med hver værdi på en separat linje.

  • Testfile1.txt indeholder værdierne: hund, egern og fugl.
  • Testfile2.txt indeholder værdierne: kat, fugl og vaskebjørn.

Opdatet viser kun de linjer, der er forskellige mellem filerne. Testfile1.txt er derferenceobjektet (<=), og Testfile2.txt er differenceobjektet (=>). Linjer med indhold, der vises i begge filer, vises ikke.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)InputObject SideIndicator----------- -------------cat =>racoon =>dog <=squirrel <=

Eksempel 2 – Sammenligner hver indholdslinje og udelukker forskellene

Dette eksempel bruger parameteren ExcludeDifferent til at sammenligne hver indholdslinje i to tekstfiler.

Som i PowerShell 7.1, når der anvendes parameteren ExcludeDifferent, udledes IncludeEqual, og outputtet indeholder kun linjer, der er indeholdt i begge filer, som det fremgår af SideIndicator(==).

$objects = @{ ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt) DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)}Compare-Object @objects -ExcludeDifferentInputObject SideIndicator----------- -------------bird ==

Eksempel 3 – Vis forskellen, når du bruger PassThru-parameteren

Normalt returnerer Compare-Object en PSCustomObject-type med følgende egenskaber:

  • InputObjektet, der sammenlignes
  • Egenskaben SideIndicator, der viser, hvilket inputobjekt output tilhører

Når du bruger PassThru-parameteren, ændres objektets Type ikke, men den instans af objektet, der returneres, har en tilføjet NoteProperty ved navn SideIndicator. SideIndicators viser, hvilket inputobjekt output hører til.

De følgende eksempler viser de forskellige outputtyper.

$a = $TrueCompare-Object -IncludeEqual $a $a(Compare-Object -IncludeEqual $a $a) | Get-MemberInputObject SideIndicator----------- ------------- True == TypeName: System.Management.Automation.PSCustomObjectName MemberType Definition---- ---------- ----------Equals Method bool Equals(System.Object obj)GetHashCode Method int GetHashCode()GetType Method type GetType()ToString Method string ToString()InputObject NoteProperty System.Boolean InputObject=TrueSideIndicator NoteProperty string SideIndicator===Compare-Object -IncludeEqual $a $a -PassThru(Compare-Object -IncludeEqual $a $a -PassThru) | Get-MemberTrue TypeName: System.BooleanName MemberType Definition---- ---------- ----------CompareTo Method int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(SystEquals Method bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable.Equals(bool otGetHashCode Method int GetHashCode()GetType Method type GetType()GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)ToInt16 Method short IConvertible.ToInt16(System.IFormatProvider provider)ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)ToString Method string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.ToToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)ToUInt16 Method ushort IConvertible.ToUInt16(System.IFormatProvider provider)ToUInt32 Method uint IConvertible.ToUInt32(System.IFormatProvider provider)ToUInt64 Method ulong IConvertible.ToUInt64(System.IFormatProvider provider)TryFormat Method bool TryFormat(System.Span destination, int charsWritten)SideIndicator NoteProperty string SideIndicator===

Når man bruger PassThru, returneres den oprindelige objekttype (System.Boolean). Bemærk, at detoutput, der blev vist med standardformatet for System.Boolean-objekter, ikke viste egenskabenSideIndicator. Det returnerede System.Boolean-objekt har dog den tilføjedeNoteProperty.

Eksempel 4 – Sammenligning af to enkle objekter ved hjælp af egenskaber

I dette eksempel sammenligner vi to forskellige strenge, der har samme længde.

Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqualLength SideIndicator------ ------------- 3 ==

Eksempel 5 – Sammenligning af komplekse objekter ved hjælp af egenskaber

Dette eksempel viser opførslen ved sammenligning af komplekse objekter. I dette eksempel gemmer vi to forskellige procesobjekter for forskellige instanser af PowerShell. Begge variabler indeholder procesobjekter med samme navn. Når objekterne sammenlignes uden angivelse af Propertyparameteren, anser cmdlet’en objekterne for at være ens. Bemærk, at værdien afInputObject er den samme som resultatet af ToString()-metoden. Da klassenSystem.Diagnostics.Process ikke har grænsefladen IComparable, konverterer cmdletten objekterne til strings og sammenligner derefter resultaterne.

PS> Get-Process pwsh NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 101 123.32 139.10 35.81 11168 1 pwsh 89 107.55 66.97 11.44 17600 1 pwshPS> $a = Get-Process -Id 11168PS> $b = Get-Process -Id 17600PS> $a.ToString()System.Diagnostics.Process (pwsh)PS> $b.ToString()System.Diagnostics.Process (pwsh)PS> Compare-Object $a $b -IncludeEqualInputObject SideIndicator----------- -------------System.Diagnostics.Process (pwsh) ==PS> Compare-Object $a $b -Property ProcessName, Id, CPUProcessName Id CPU SideIndicator----------- -- --- -------------pwsh 17600 11.4375 =>pwsh 11168 36.203125 <=

Når du angiver egenskaber, der skal sammenlignes, viser cmdletten forskellene.

Eksempel 6 – Sammenligning af komplekse objekter, der implementerer IComparable

Hvis objektet implementerer IComparable, søger cmdletten efter måder at sammenligne objekterne på.Hvisobjekterne er af forskellig type, konverteres Difference-objektet til typen afReferenceObject og sammenlignes derefter.

I dette eksempel sammenligner vi en streng med et TimeSpan-objekt. I det første tilfælde konverteres strengen til en TimeSpan, så objekterne er ens.

Compare-Object ("0:0:1") "0:0:1" -IncludeEqualInputObject SideIndicator----------- -------------00:00:01 ==Compare-Object "0:0:1" ("0:0:1")InputObject SideIndicator----------- -------------00:00:01 =>0:0:1 <=

I det andet tilfælde konverteres TimeSpan til en streng, så objekterne er forskellige.

Parametre

-CaseSensitive

Angiver, at sammenligninger skal være case-sensitive.

Type: SwitchParameter
Position: Named
Standardværdi: False
Accepter input fra pipelinen: Falsk
Accepter jokertegn: Falsk
-Culture

Angiver den kultur, der skal bruges ved sammenligninger.

Type: Tegning
Position: Named
Standardværdi: None
Accept pipeline input: Falsk
Accepter jokertegn: Falsk
-DifferenceObject

Angiver de objekter, der sammenlignes med referenceobjekterne.

Type: PSObject
Position: 1
Standardværdi: None
Accept pipeline input: True
Accept wildcard-tegn: False
-ExcludeDifferent

Indikerer, at denne cmdlet kun viser egenskaberne for sammenlignede objekter, der er ens. Forskellene mellem objekterne kasseres.

Brug ExcludeDifferent med IncludeEqual for kun at få vist de linjer, der svarer til hinanden mellem dersammenligning og forskelobjekter.

Hvis ExcludeDifferent er angivet uden IncludeEqual, er der ingen output.

Type: SwitchParameter
Position: Named
Standardværdi: False
Accepter input fra rørledningen: Falsk
Accepter jokertegn: Falsk
-IncludeEqual

IncludeEqual viser overensstemmelserne mellem reference- og differenceobjekterne.

Som standard omfatter output også forskellene mellem reference- og differenceobjekterne.

Type: SwitchParameter
Position: Named
Standardværdi: False
Accepter pipeline input: False
Accepter wildcard-tegn: Falsk
-PassThru

Når du bruger parameteren PassThru, udelader Compare-Object PSCustomObject-omslaget omkring de sammenlignede objekter og returnerer de forskellige objekter, uændret.

Type: SwitchParameter
Position: Named
Standardværdi: False
Accepter input fra pipeline: Falsk
Accepter jokertegn: Falsk
-Egenskab

Angiver et array af egenskaber for de reference- og differenceobjekter, der skal sammenlignes.

Værdien af parameteren Property kan være en ny beregnet egenskab. Den beregnede egenskabkan være en scriptblok eller en hashtabel. Gyldige nøgle-værdipar er:

  • Udtryk – <string> eller <script block>

For yderligere oplysninger, seOm_Calculated_Properties.

Type: Objekt
Position: Named
Standardværdi: None
Accept pipeline input: Falsk
Accepter jokertegn: Falsk
-ReferenceObject

Angiver et array af objekter, der bruges som reference til sammenligning.

Type: PSObject
Position: 0
Standardværdi: None
Accept pipeline input: Falsk
Accepter jokertegn: Falsk
-SyncWindow

Angiver antallet af tilstødende objekter, som Compare-Object inspicerer, mens der søges efter et match i en samling af objekter. Compare-Object undersøger tilstødende objekter, når den ikke finder objektet i den samme position i en samling. Standardværdien er ::MaxValue, hvilket betyder, at Compare-Object undersøger hele objektopsamlingen.

Type: Int32
Position: Named
Standardværdi: ::MaxValue
Accepterer pipelineinput: False
Accepter jokertegn: False

Input

PSObject

Du kan sende et objekt ned i pipelinen til parameteren DifferenceObject.

Outputs

None

Hvis referenceobjektet og differenceobjektet er det samme, er der ingen output, medmindre du bruger parameteren IncludeEqual.

PSCustomObject

Hvis objekterne er forskellige, Compare-Objectindpakkes de forskellige objekter i en PSCustomObjectwrapper med en SideIndicator-egenskab for at henvise til forskellene.

Når du bruger PassThru-parameteren, ændres objektets Type ikke, men den instans af objektet, der returneres, har en tilføjet NoteProperty ved navn SideIndicator. SideIndicators viser, hvilket inputobjekt outputtet tilhører.

Notes

Når du bruger parameteren PassThru, indeholder det output, der vises i konsollen, muligvis ikke egenskabenSideIndicator. Standardformatvisningen af for den for objekttypen output afCompare-Object omfatter ikke SideIndicator-egenskaben. Du kan finde flere oplysninger iExempel 3 i denne artikel.

  • om_Calculated_Properties
  • ForEach-Object
  • Group-Object
  • Measure-Object
  • New-Object
  • Select-Object
  • Sort-Object
  • Tee-Object
  • Where-Object
  • Get-Process

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.