Bestimmen Sie, ob zwei Objekte in PowerShell identisch sind

Rohan Timalsina 30 Januar 2023
  1. Verwenden des Cmdlets Compare-Object zum Vergleichen von zwei Zeichenfolgen in PowerShell
  2. Verwenden Sie das Cmdlet Compare-Object zum Vergleichen von PSCustomObject in PowerShell
  3. Verwenden des Cmdlet Compare-Object zum Vergleichen von Quell- und Zieldateien in PowerShell
  4. Verwenden Sie das Cmdlet Compare-Object, um Eigenschaften von Dateien in PowerShell zu vergleichen
Bestimmen Sie, ob zwei Objekte in PowerShell identisch sind

Manchmal kann es schwierig sein, zwei Objekte zu vergleichen und festzustellen, ob sie identisch sind, aber mit Hilfe von PowerShell ist dies problemlos möglich. Die Objekte können unterschiedlicher Art sein, wie z. B. Zeichenfolgen, Dateien, Datei- oder Variableninhalte, Prozesse usw.

Mit dem Cmdlet Compare-Object können Sie zwei Sätze von Objekten in PowerShell vergleichen. Dieses Tutorial hilft Ihnen, zwei Objekte zu vergleichen und mithilfe von PowerShell festzustellen, ob sie identisch sind.

Verwenden des Cmdlets Compare-Object zum Vergleichen von zwei Zeichenfolgen in PowerShell

Mit Compare-Object können Sie die Unterschiede zwischen zwei Strings ermitteln.

Bevor Sie beginnen, wollen wir die Seitenindikatoren verstehen, die vom Cmdlet Compare-Object verwendet werden, um die Unterschiede zwischen den beiden Objekten anzuzeigen.

Side Indicators      Meaning
==                   It indicates both the source and destination objects are equal or contain the same values.
=>                   It indicates that the destination object is different or the content only exists on the destination object.
<=                   It indicates that the source object is different or the content only exists on the source object.

Der folgende Befehl ist ein Beispiel für einen Vergleich zweier verschiedener Zeichenfolgen.

Compare-Object "Apple" "Mango"

Ausgabe:

InputObject SideIndicator
----------- -------------
Mango       =>
Apple       <=

Die obige Ausgabe zeigt, dass beide Zeichenfolgen unterschiedlich sind. Der String Mango zeigt den rechten Indikator, was bedeutet, dass er sich vom Quellobjekt unterscheidet, und der String Apple zeigt den linken Indikator, was bedeutet, dass er sich vom Zielobjekt unterscheidet.

Wenn jedoch zwei Zeichenfolgen gleich sind, zeigt der Befehl keine Ausgabe, es sei denn, er wird mit dem Parameter -IncludeEqual verwendet. Es zeigt den Indikator == für gleiche Zeichenfolgen.

Der folgende Befehl vergleicht zwei ähnliche Zeichenfolgen.

Compare-Object "Apple" "apple" -IncludeEqual

Ausgabe:

InputObject SideIndicator
----------- -------------
Apple       ==

Das obige Beispiel unterscheidet nicht zwischen Groß- und Kleinschreibung, da es gleiche Indikatoren anzeigt, obwohl sie unterschiedliche Groß- und Kleinschreibung haben. Sie müssen den Parameter -CaseSensitive verwenden, um Zeichenfolgen mit Berücksichtigung der Groß-/Kleinschreibung zu vergleichen.

Compare-Object "Apple" "apple" -CaseSensitive

Ausgabe:

InputObject SideIndicator
----------- -------------
apple       =>
Apple       <=

Wie Sie sehen können, zeigt es diesmal Unterschiede in den beiden Saiten.

Verwenden Sie das Cmdlet Compare-Object zum Vergleichen von PSCustomObject in PowerShell

Sie können auch Compare-Object verwenden, um PSCustomObject in PowerShell zu vergleichen.

Das folgende Beispiel zeigt die Verwendung von Compare-Object, um zwei PSCustomObject zu vergleichen: $obj1 und $obj2.

$obj1 = [PSCustomObject]@{ a = 10; b = 20}
$obj2 = [PSCustomObject]@{ a = 10; b = 20}
function Test-Object {
    param(
        [Parameter(Mandatory = $true)]
        $obj1,
        [Parameter(Mandatory = $false)]
        $obj2
    )

    return !(Compare-Object $obj1.PSObject.Properties $obj2.PSObject.Properties)
}
Test-Object $obj1 $obj2

Ausgabe:

True

Es gibt True zurück, was bedeutet, dass beide Objekte die gleichen Werte haben und identisch sind.

Verwenden des Cmdlet Compare-Object zum Vergleichen von Quell- und Zieldateien in PowerShell

Für dieses Tutorial haben wir zwei Ordner erstellt, Folder1 und Folder2, die einige .txt-Dateien im Laufwerk C des Computers enthalten.

Das folgende Skript vergleicht Dateien im Quellordner Folder1 und im Zielordner Folder2.

$sourcefiles = Get-ChildItem C:\Folder1
$destinationfiles = Get-ChildItem C:\Folder2
Compare-Object $sourcefiles $destinationfiles -IncludeEqual

Das Cmdlet Get-ChildItem wird verwendet, um den Inhalt aus den Ordnern Folder1 und Folder2 abzurufen, die jeweils in zwei Variablen $sourcefiles und $destinationfiles gespeichert sind.

Ausgabe:

InputObject SideIndicator
----------- -------------
Text3.txt   ==
Text4.txt   =>
Text1.txt   <=
Text2.txt   <=

Die obige Ausgabe zeigt, dass Test3.txt in beiden Ordnern vorhanden ist. Die Test4.txt ist nur im Zielordner vorhanden, während die Test1.txt und Test2.txt nur im Quellordner vorhanden sind.

Verwenden Sie das Cmdlet Compare-Object, um Eigenschaften von Dateien in PowerShell zu vergleichen

Sie können Compare-Object auch verwenden, um Dateien anhand von Eigenschaften wie lastaccesstime, lastwritetime, length usw. zu vergleichen. Der Parameter -Property wird verwendet, um die Eigenschaften der zu vergleichenden Objekte anzugeben.

Der folgende Befehl vergleicht Dateien anhand der Eigenschaften Name und length mit Compare-Object.

Compare-Object $sourcefiles $destinationfiles -Property Name, Length -IncludeEqual

Ausgabe:

Name      Length SideIndicator
----      ------ -------------
Test3.txt      5 ==
Test4.txt     12 =>
Test1.txt     12 <=
Test2.txt      8 <=

Das Compare-Object ist ein einfacher und nützlicher Befehl, um zwei Objekte zu vergleichen. Wir hoffen, dass Ihnen dieses Tutorial eine Vorstellung davon gegeben hat, wie Sie mit PowerShell überprüfen können, ob zwei Objekte gleich sind.

Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Verwandter Artikel - PowerShell Object