Com certeza, comparar arquivos ou conteúdos de arquivos no Windows é algo que você vem fazendo ao longo dos anos. Mas olhar para arquivos e conteúdos pode cansar seus olhos em algum momento? Bem, sorte para você, você pode comparar objetos com o PowerShell da maneira que desejar com o comando Compare-Object
.
Neste tutorial, você aprenderá a comparar objetos com o PowerShell, como arquivos ou conteúdos de arquivos, personalizando a saída.
Poupe seus olhos do cansaço e compare objetos de forma eficaz!
Pré-requisitos
Este tutorial será uma demonstração prática, mas desde que você tenha um PC com Windows com o PowerShell, você está pronto para começar. A versão 5.1 do PowerShell é usada neste tutorial.
Comparando o Conteúdo do Arquivo
Imagine que você está mantendo dois arquivos diferentes com o mesmo conteúdo. Como você saberia se ambos os arquivos mantêm o mesmo conteúdo? Executar o comando Get-Content
pode ser a solução. O comando Get-Content
recupera o conteúdo de um arquivo de uma localização especificada.
Abra o PowerShell e execute os comandos abaixo para obter o conteúdo (Get-Content
) dos arquivos especificados em variáveis ($file1
e $file2
). Substitua o caminho abaixo pelo caminho dos arquivos escolhidos para comparar.

Agora, execute o comando Compare-Object
abaixo para comparar o conteúdo de $file
(-ReferenceObject
) com $file2
(-DifferenceObject
).
Por padrão, Compare-Object
não mostra os valores presentes em ambas as variáveis. Como solução, adicione o parâmetro -IncludeEqual
para mostrar os valores na saída.
No resultado abaixo, o SideIndicator indica se ambos os arquivos têm o mesmo conteúdo (por linha) ou não:
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). |

Talvez você prefira comparar strings com sensibilidade a maiúsculas e minúsculas. Se sim, adicione o parâmetro -CaseSensitive
já que o comando Compare-Object
não é sensível a maiúsculas e minúsculas por padrão.
Execute os comandos abaixo para comparar $file1
com $file2
, tanto com quanto sem sensibilidade a maiúsculas e minúsculas.
Como você pode ver abaixo, sem o parâmetro -CaseSensitive
, o comando Compare-Object
não mostra powershell na saída.

Comparar strings também funciona de maneira semelhante à comparação de conteúdo de arquivos, onde você pode especificar as strings ou usar variáveis para representar as strings a serem comparadas. Lembre-se de que o comando
Compare-Object
compara strings de origem e não caracteres.
Comparando Listas de Arquivos de Locais Diferentes
Agora que você sabe como comparar o conteúdo de arquivos, por que não comparar arquivos reais de locais diferentes? Comparar listas de arquivos é útil quando você está gerenciando dois servidores diferentes onde mantém a mesma pasta para um serviço contendo os mesmos arquivos.
Desta vez, você usará o comando Get-ChildItem
para obter a lista de arquivos em uma pasta para comparar com a lista de arquivos de outra pasta.
Execute os comandos abaixo para obter as listas de arquivos das pastas C:\Temp\Folder1\ e C:\Temp\Folder2 e armazenar as listas nas variáveis $Folder1List e $Folder2List.
Você também pode usar o parâmetro
-Recurse
no comandoGet-Childitem
para recuperar recursivamente uma lista de arquivos em subpastas.

Comparar Objetos com PowerShell por Propriedades
Você acabou de comparar arquivos em diferentes locais, mas talvez queira adicionar outra opção para comparar arquivos por propriedades. E neste demo, você irá comparar arquivos pela hora do último acesso.
Execute os seguintes comandos para comparar arquivos de diferentes pastas ($Pasta1 e $Pasta2) pela hora do último acesso.

Comparando Processos e Serviços
As capacidades do comando Compare-Object
não estão limitadas apenas à comparação de strings ou conteúdo em arquivos. Você também pode comparar processos, serviços e assim por diante.
Talvez você queira capturar serviços entre dois servidores. Se sim, você pode armazenar os serviços em variáveis e compará-los.
Execute os seguintes comandos para comparar serviços entre dois servidores diferentes ($servidor1
e $servidor2
).

Se você preferir comparar processos, os comandos a serem executados são semelhantes aos de comparação de serviços. Você também pode comparar processos na mesma máquina ou em dois servidores diferentes.
Execute os comandos abaixo para capturar os processos em execução de duas máquinas (Jumpbox
e servidores AD
) em variáveis e compará-los.

Identificação de Atividades ao Comparar Listas de Processos
O cmdlet Compare-Object
também é útil em alguns cenários de solução de problemas. Como? Você pode capturar processos em execução atualmente em uma variável e iniciar sua atividade. Em seguida, capture os processos em execução em uma nova variável e compare os novos processos.
Execute os comandos abaixo para identificar atividades ao comparar duas listas diferentes de processos capturados.

Comparando Usuários Entre Diferentes Grupos do Active Directory
Se você estiver gerenciando o mesmo conjunto de usuários de diferentes grupos do AD, comparar a lista de usuários com o comando Compare-Object
será útil. Isso permite que você acompanhe de perto se um usuário está ausente de qualquer um dos dois grupos do AD diferentes.
Execute os comandos abaixo para comparar usuários entre dois grupos do AD diferentes (staticvmusers
e vdivmusers
).

Conclusão
Neste tutorial, você aprendeu as nuances de como comparar objetos com o PowerShell de várias maneiras, desde conteúdo de arquivos até usuários em grupos AD. Percebeu que o cmdlet Compare-Object
é uma solução rápida para comparar arquivos, serviços, processos, e muito mais.
Você adquiriu o conhecimento básico de como usar o cmdlet Compare-Object
. Agora, que tal construir sobre esse conhecimento recém-descoberto, aprendendo arrays de comparação poderosos do PowerShell?
Source:
https://adamtheautomator.com/compare-objects-with-powershell/