Determinar si dos objetos son idénticos en PowerShell

Rohan Timalsina 13 junio 2022
  1. Utilice el cmdlet Compare-Object para comparar dos cadenas en PowerShell
  2. Utilice el cmdlet Compare-Object para comparar PSCustomObject en PowerShell
  3. Utilice el cmdlet Compare-Object para comparar archivos de origen y destino en PowerShell
  4. Utilice el cmdlet Compare-Object para comparar las propiedades de los archivos en PowerShell
Determinar si dos objetos son idénticos en PowerShell

A veces, puede ser un desafío comparar dos objetos y saber si son idénticos, pero se puede hacer fácilmente con la ayuda de PowerShell. Los objetos pueden ser de varios tipos como cadenas, archivos, archivos o variables de contenido, procesos, etc.

Puede usar el cmdlet Compare-Object para comparar dos conjuntos de objetos en PowerShell. Este tutorial lo ayudará a comparar dos objetos y determinar si son idénticos usando PowerShell.

Utilice el cmdlet Compare-Object para comparar dos cadenas en PowerShell

Puede usar Compare-Object para determinar las diferencias entre dos cadenas.

Antes de comenzar, comprendamos los indicadores secundarios que utiliza el cmdlet Compare-Object para mostrar las diferencias entre los dos objetos.

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.

El siguiente comando es un ejemplo de una comparación de dos cadenas diferentes.

Compare-Object "Apple" "Mango"

Producción :

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

El resultado anterior muestra que ambas cadenas son diferentes. La cadena Mango muestra el indicador derecho, lo que significa que es diferente del objeto de origen, y la cadena Apple muestra el indicador izquierdo, lo que significa que es diferente del objeto de destino.

Pero si dos cadenas son iguales, el comando no muestra ningún resultado a menos que se use con el parámetro -IncludeEqual. Muestra el indicador == para cadenas iguales.

El siguiente comando compara dos cadenas similares.

Compare-Object "Apple" "apple" -IncludeEqual

Producción :

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

El ejemplo anterior no distingue entre mayúsculas y minúsculas, ya que muestra indicadores iguales aunque tienen mayúsculas y minúsculas diferentes. Deberá usar el parámetro -CaseSensitive para comparar cadenas que distinguen entre mayúsculas y minúsculas.

Compare-Object "Apple" "apple" -CaseSensitive

Producción :

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

Como puede ver, muestra diferencias en las dos cadenas esta vez.

Utilice el cmdlet Compare-Object para comparar PSCustomObject en PowerShell

También puede usar Compare-Object para comparar PSCustomObject en PowerShell.

El siguiente ejemplo demuestra el uso de Compare-Object para comparar dos PSCustomObject: $obj1 y $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

Producción :

True

Devuelve True, lo que significa que ambos objetos tienen los mismos valores y son idénticos.

Utilice el cmdlet Compare-Object para comparar archivos de origen y destino en PowerShell

Para este tutorial, hemos creado dos carpetas, Folder1 y Folder2, que contienen algunos archivos .txt en la unidad C de la computadora.

El siguiente script compara los archivos en la carpeta de origen Folder1 y la carpeta de destino Folder2.

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

El cmdlet Get-ChildItem se utiliza para obtener el contenido de las carpetas Folder1 y Folder2, almacenadas en dos variables $sourcefiles y $destinationfiles, respectivamente.

Producción :

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

El resultado anterior muestra que Test3.txt está presente en ambas carpetas. El Test4.txt solo está presente en la carpeta de destino, mientras que Test1.txt y Test2.txt solo están presentes en la carpeta de origen.

Utilice el cmdlet Compare-Object para comparar las propiedades de los archivos en PowerShell

También puede usar Compare-Object para comparar archivos por propiedades como lastaccesstime, lastwritetime, length, etc. El parámetro -Property se usa para especificar las propiedades de los objetos a comparar.

El siguiente comando compara archivos por propiedades Name y Length usando Compare-Object.

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

Producción :

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

El Compare-Object es un comando simple y útil para comparar dos objetos. Esperamos que este tutorial le haya dado una idea de cómo verificar si dos objetos son iguales usando 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

Artículo relacionado - PowerShell Object