Bestimmen Sie, ob zwei Objekte in PowerShell identisch sind
-
Verwenden des Cmdlets
Compare-Object
zum Vergleichen von zwei Zeichenfolgen in PowerShell -
Verwenden Sie das Cmdlet
Compare-Object
zum Vergleichen vonPSCustomObject
in PowerShell -
Verwenden des Cmdlet
Compare-Object
zum Vergleichen von Quell- und Zieldateien in PowerShell -
Verwenden Sie das Cmdlet
Compare-Object
, um Eigenschaften von Dateien in PowerShell zu vergleichen
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.