Claro o suficiente, comparar arquivos ou conteúdos de arquivos no Windows é algo que você tem feito ao longo dos anos. Mas será que observar arquivos e conteúdos não cansa seus olhos em algum momento? Bem, por sorte, 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.
Economize seus olhos da fadiga e compare objetos de maneira eficaz!
Este tutorial será uma demonstração prática, mas contanto que você tenha um PC com Windows com PowerShell, está pronto para começar. A versão 5.1 do PowerShell é usada neste tutorial.
Comparando Conteúdos de Arquivos
Imagine que você está mantendo dois arquivos diferentes com o mesmo conteúdo. Como 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 $file1
(-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.
A partir da saída 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 prefira comparar strings com sensibilidade a maiúsculas e minúsculas. Se sim, acrescente 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. Tenha em mente 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 diferentes locais? Comparar listas de arquivos é útil quando você está gerenciando dois servidores diferentes nos quais você 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 e 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 pode querer adicionar outra opção para comparar arquivos por propriedades. E neste demo, você irá comparar arquivos pelo último acesso.
Execute os seguintes comandos para comparar arquivos de diferentes pastas ($Folder1 e $Folder2) pelo último acesso.

Comparando Processos e Serviços
As capacidades do comando Compare-Object
não se limitam apenas a comparar 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 comparar os serviços.
Execute os seguintes comandos para comparar serviços entre dois servidores diferentes ($server1
e $server2
).

Se você preferir comparar processos, os comandos a serem executados são semelhantes à 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 processos em execução de duas máquinas (Jumpbox
e servidores AD
) em variáveis e compará-los.

Identificação de Atividades através da Comparação de Listas de Processos
O cmdlet Compare-Object
também é útil em alguns cenários de solução de problemas. Como? Você pode capturar os processos em execução atualmente em uma variável e iniciar sua atividade. Em seguida, você captura os processos em execução em uma nova variável e compara os novos processos.
Execute os comandos abaixo para identificar atividades comparando 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ê fique atento se um usuário está ausente de qualquer um dos dois grupos diferentes do AD.
Execute os comandos abaixo para comparar usuários entre dois grupos diferentes do AD (staticvmusers
e vdivmusers
).

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