Déterminer si deux objets sont identiques dans PowerShell

Rohan Timalsina 30 janvier 2023
  1. Utiliser l’applet de commande Compare-Object pour comparer deux chaînes dans PowerShell
  2. Utilisez l’applet de commande Compare-Object pour comparer PSCustomObject dans PowerShell
  3. Utiliser l’applet de commande Compare-Object pour comparer les fichiers source et de destination dans PowerShell
  4. Utilisez l’applet de commande Compare-Object pour comparer les propriétés des fichiers dans PowerShell
Déterminer si deux objets sont identiques dans PowerShell

Parfois, il peut être difficile de comparer deux objets et de dire s’ils sont identiques, mais cela peut être facilement fait à l’aide de PowerShell. Les objets peuvent être de différents types tels que des chaînes, des fichiers, des contenus de fichiers ou de variables, des processus, etc.

Vous pouvez utiliser l’applet de commande Compare-Object pour comparer deux ensembles d’objets dans PowerShell. Ce didacticiel vous aidera à comparer deux objets et à déterminer s’ils sont identiques à l’aide de PowerShell.

Utiliser l’applet de commande Compare-Object pour comparer deux chaînes dans PowerShell

Vous pouvez utiliser Compare-Object pour déterminer les différences entre deux chaînes.

Avant de commencer, comprenons les indicateurs latéraux utilisés par l’applet de commande Compare-Object pour montrer les différences entre les deux objets.

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.

La commande suivante est un exemple de comparaison de deux chaînes différentes.

Compare-Object "Apple" "Mango"

Production:

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

La sortie ci-dessus montre que les deux chaînes sont différentes. La chaîne Mango montre l’indicateur de droite, ce qui signifie qu’il est différent de l’objet source, et la chaîne Apple montre l’indicateur de gauche, ce qui signifie qu’il est différent de l’objet de destination.

Mais si deux chaînes sont égales, la commande n’affiche aucune sortie à moins d’être utilisée avec le paramètre -IncludeEqual. Il affiche l’indicateur == pour les chaînes égales.

La commande suivante compare deux chaînes similaires.

Compare-Object "Apple" "apple" -IncludeEqual

Production:

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

L’exemple ci-dessus n’est pas sensible à la casse car il affichait des indicateurs égaux bien qu’ils aient des casses de lettres différentes. Vous devrez utiliser le paramètre -CaseSensitive pour comparer les chaînes sensibles à la casse.

Compare-Object "Apple" "apple" -CaseSensitive

Production:

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

Comme vous pouvez le voir, cela montre des différences dans les deux chaînes cette fois.

Utilisez l’applet de commande Compare-Object pour comparer PSCustomObject dans PowerShell

Vous pouvez également utiliser Compare-Object pour comparer PSCustomObject dans PowerShell.

L’exemple suivant illustre l’utilisation de Compare-Object pour comparer deux PSCustomObject : $obj1 et $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

Production:

True

Il renvoie True, ce qui signifie que les deux objets ont les mêmes valeurs et sont identiques.

Utiliser l’applet de commande Compare-Object pour comparer les fichiers source et de destination dans PowerShell

Pour ce tutoriel, nous avons créé deux dossiers, Folder1 et Folder2, contenant des fichiers .txt dans le lecteur C de l’ordinateur.

Le script suivant compare les fichiers du dossier source Folder1 et du dossier de destination Folder2.

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

L’applet de commande Get-ChildItem permet d’obtenir le contenu des dossiers Folder1 et Folder2, stockés respectivement dans deux variables $sourcefiles et $destinationfiles.

Production:

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

La sortie ci-dessus montre que Test3.txt est présent dans les deux dossiers. Le Test4.txt n’est présent que dans le dossier de destination, tandis que le Test1.txt et le Test2.txt ne sont présents que dans le dossier source.

Utilisez l’applet de commande Compare-Object pour comparer les propriétés des fichiers dans PowerShell

Vous pouvez également utiliser Compare-Object pour comparer des fichiers par des propriétés comme lastaccesstime, lastwritetime, length, etc. Le paramètre -Property est utilisé pour spécifier les propriétés des objets à comparer.

La commande suivante compare les fichiers par propriétés Name et Length en utilisant Compare-Object.

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

Production:

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

Le Comparer-Object est une commande simple et utile pour comparer deux objets. Nous espérons que ce didacticiel vous a donné une idée de la façon de vérifier si deux objets sont égaux à l’aide de PowerShell.

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

Article connexe - PowerShell Object