Es cierto, comparar archivos o contenido de archivos en Windows es algo que has estado haciendo a lo largo de los años. Pero, ¿no te cansa la vista mirar archivos y contenido en algún momento? Bueno, afortunadamente para ti, puedes comparar objetos con PowerShell de la manera que desees con el comando Compare-Object
.
En este tutorial, aprenderás a comparar objetos con PowerShell, como archivos o contenido de archivos, personalizando la salida.
¡Evita el cansancio de los ojos y compara objetos de manera efectiva!
Prerrequisitos
Este tutorial será una demostración práctica, pero siempre y cuando tengas una PC con Windows y PowerShell, estás listo para comenzar. En este tutorial se utiliza la versión 5.1 de PowerShell.
Comparando el Contenido de Archivos
Imagina que tienes dos archivos diferentes con el mismo contenido. ¿Cómo sabrías si ambos archivos tienen el mismo contenido? Ejecutar el comando Get-Content
puede ser la solución. El comando Get-Content
recupera el contenido de un archivo desde una ubicación especificada.
Abre PowerShell y ejecuta los siguientes comandos para obtener el contenido (Get-Content
) de los archivos especificados en variables ($file1
y $file2
). Reemplaza la ruta a continuación con la ruta de los archivos que elijas comparar.

Ahora, ejecuta el siguiente comando Compare-Object
para comparar el contenido de $file
(-ReferenceObject
) con $file2
(-DifferenceObject
).
Por defecto, Compare-Object
no muestra los valores que están presentes en ambas variables. Como solución, agrega el parámetro -IncludeEqual
para mostrar los valores en la salida.
En la salida a continuación, el indicador de lado (SideIndicator) indica si ambos archivos tienen el mismo contenido (por línea) o no:
SideIndicator | Definition |
== | Indicates the content is present in both files ($file1 and $file2). |
=> | Indicates the content only exists in the -DifferenceObject file ($file2). |
=> | Indicates the content only exists in the -ReferenceObject file ($file1). |

Tal vez prefieras comparar las cadenas con distinción entre mayúsculas y minúsculas. Si es así, agrega el parámetro -CaseSensitive
ya que el comando Compare-Object
no distingue entre mayúsculas y minúsculas de forma predeterminada.
Ejecuta los siguientes comandos para comparar $file1
con $file2
, tanto con como sin distinción entre mayúsculas y minúsculas.
Como puedes ver a continuación, sin el parámetro -CaseSensitive
, el comando Compare-Object
no muestra powershell en la salida.

Comparar cadenas también es similar a comparar el contenido de archivos, donde puedes especificar las cadenas o usar variables para representar las cadenas a comparar. Ten en cuenta que el comando
Compare-Object
compara cadenas de origen y no caracteres.
Comparar listas de archivos de diferentes ubicaciones
Ahora que sabes cómo comparar el contenido de archivos, ¿por qué no comparar archivos reales de diferentes ubicaciones? Comparar listas de archivos es útil cuando estás administrando dos servidores diferentes donde tienes la misma carpeta para un servicio que contiene los mismos archivos.
En esta ocasión, usarás el comando Get-ChildItem
para obtener la lista de archivos de una carpeta y compararla con la lista de archivos de otra carpeta.
Ejecuta los siguientes comandos para obtener las listas de archivos de las carpetas C:\Temp\Folder1\ y C:\Temp\Folder2 y guarda las listas en las variables $Folder1List y $Folder2List.
También puedes usar el parámetro
-Recurse
en el comandoGet-ChildItem
para obtener de forma recursiva una lista de archivos en subcarpetas.

Comparar objetos con PowerShell por propiedades
Acabas de comparar archivos en diferentes ubicaciones, pero es posible que desees agregar otra opción para comparar archivos por propiedades. Y en esta demostración, compararás archivos por último horario de acceso.
Ejecuta los siguientes comandos para comparar archivos de diferentes carpetas ($Folder1 y $Folder2) por último horario de acceso.

Comparar procesos y servicios
Las capacidades del comando Compare-Object
no se limitan solo a comparar cadenas o contenido en archivos. También puedes comparar procesos, servicios, y así sucesivamente.
Tal vez quieras capturar los servicios entre dos servidores. Si es así, puedes almacenar los servicios en variables y compararlos.
Ejecuta los siguientes comandos para comparar servicios entre dos servidores diferentes ($server1
y $server2
).

Si prefieres comparar procesos, los comandos a ejecutar son similares a los de comparar servicios. También puedes comparar procesos en la misma máquina o en dos servidores diferentes.
Ejecuta los siguientes comandos para capturar los procesos en ejecución de dos máquinas (Jumpbox
y servidores AD
) en variables y compararlos.

Identificación de actividades mediante la comparación de listas de procesos
El cmdlet Compare-Object
también es útil en algunos escenarios de solución de problemas. ¿Cómo? Puedes capturar los procesos en ejecución actual en una variable y comenzar tu actividad. Luego capturas los procesos en ejecución en una nueva variable y los comparas con los nuevos procesos.
Ejecuta los siguientes comandos para identificar actividades comparando dos listas diferentes de procesos capturados.

Comparación de usuarios entre diferentes grupos de Active Directory
Si estás administrando el mismo conjunto de usuarios desde diferentes grupos de AD, la comparación de la lista de usuarios con el comando Compare-Object
te será útil. Haciendo esto, puedes estar atento si un usuario falta en alguno de los dos grupos de AD diferentes.
Ejecuta los siguientes comandos para comparar usuarios entre dos grupos de AD diferentes (staticvmusers
y vdivmusers
).

Conclusión
En este tutorial, has aprendido cómo comparar objetos con PowerShell de muchas maneras, desde el contenido de archivos hasta usuarios en grupos de AD. Te has dado cuenta de que el cmdlet Compare-Object
es una solución rápida para comparar archivos, servicios, procesos, y más.
Has adquirido los conocimientos básicos para utilizar el cmdlet Compare-Object
. Ahora, ¿por qué no aprovechar este conocimiento recién adquirido y aprender sobre poderosas comparaciones de arreglos en PowerShell?
Source:
https://adamtheautomator.com/compare-objects-with-powershell/