Determinar si dos objetos son idénticos en PowerShell

  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.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
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