Sammenligner to sæt objekter.
- Syntaks
- Beskrivelse
- Eksempler
- Eksempel 1 – Sammenligning af indholdet af to tekstfiler
- Eksempel 2 – Sammenligner hver indholdslinje og udelukker forskellene
- Eksempel 3 – Vis forskellen, når du bruger PassThru-parameteren
- Eksempel 4 – Sammenligning af to enkle objekter ved hjælp af egenskaber
- Eksempel 5 – Sammenligning af komplekse objekter ved hjælp af egenskaber
- Eksempel 6 – Sammenligning af komplekse objekter, der implementerer IComparable
- Parametre
- Input
- Outputs
- Notes
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
Angiver, at sammenligninger skal være case-sensitive.
Type: | SwitchParameter |
Position: | Named |
Standardværdi: | False |
Accepter input fra pipelinen: | Falsk |
Accepter jokertegn: | Falsk |
Angiver den kultur, der skal bruges ved sammenligninger.
Type: | Tegning |
Position: | Named |
Standardværdi: | None |
Accept pipeline input: | Falsk |
Accepter jokertegn: | Falsk |
Angiver de objekter, der sammenlignes med referenceobjekterne.
Type: | PSObject |
Position: | 1 |
Standardværdi: | None |
Accept pipeline input: | True |
Accept wildcard-tegn: | False |
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 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 |
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 |
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 |
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 |
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-Object
indpakkes de forskellige objekter i en PSCustomObject
wrapper 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