Compare-Object

Module: Microsoft.PowerShell.Utility

Compara dois conjuntos de objectos.

Syntax

Compare-Object <PSObject> <PSObject> >] 

Descrição

The Compare-Object cmdlet compara dois conjuntos de objectos. Um conjunto de objetos é a referência, e o outro conjunto de objetos é a diferença.

>Compare-Object verifica os métodos disponíveis para comparar um objeto inteiro. Se não encontrar um método adequado, ele chama os métodos ToString() dos objetos de entrada e compara os stringresults. Você pode fornecer uma ou mais propriedades a serem usadas para comparação. Quando as propriedades são fornecidas, o cmdlet compara os valores dessas propriedades apenas.

O resultado da comparação indica se um valor de propriedade apareceu apenas no objeto de referência (<=) ou apenas no objeto de diferença (=>). Se o parâmetro IncludeEqual for usado, (==) indica que o valor está em ambos os objetos.

Se os objetos de referência ou de diferença forem nulos ($null), Compare-Object gera erro aterminante.

Alguns exemplos usam splatting para reduzir o comprimento da linha das amostras de código. Para mais informações, veja sobre_Splatting.

Exemplos

Exemplo 1 – Compare o conteúdo de dois arquivos de texto

Este exemplo compara o conteúdo de dois arquivos de texto. O exemplo usa os dois arquivos de texto seguintes, com cada valor em uma linha separada.

  • Testfile1.txt contém os valores: cão, esquilo e pássaro.
  • Testfile2.txt contém os valores: gato, pássaro e guaxinim.

A saída exibe apenas as linhas que são diferentes entre os arquivos. Testfile1.txt é o objeto de referência (<=) e Testfile2.txt é o objeto de diferença (=>). As linhas comcontente que aparecem em ambos os arquivos não são exibidas.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)InputObject SideIndicator----------- -------------cat =>racoon =>dog <=squirrel <=

Exemplo 2 – Compare cada linha de conteúdo e exclua as diferenças

Este exemplo usa o parâmetro ExcludeDifferent para comparar cada linha decontente em dois arquivos de texto.

As do PowerShell 7.1, ao usar o parâmetro ExcludeDifferent, IncludeEqual é inferido e a saída contém apenas as linhas contidas em ambos os arquivos, como mostrado pelo SideIndicator(==).

$objects = @{ ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt) DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)}Compare-Object @objects -ExcludeDifferentInputObject SideIndicator----------- -------------bird ==

Exemplo 3 – Mostra a diferença quando usando o parâmetro PassThru

Normalmente, Compare-Object retorna um tipo PSCustomObject com as seguintes propriedades:

  • O objeto InputObject sendo comparado
  • A propriedade SideIndicator mostrando a qual objeto de input o output pertence

Quando você usa o parâmetro PassThru, o Tipo do objeto não é alterado mas a instância do objeto retornado tem um NoteProperty chamado SideIndicator adicionado. SideIndicator mostra a que objeto de entrada o output pertence.

Os exemplos seguintes mostram os diferentes tipos de output.

$a = $TrueCompare-Object -IncludeEqual $a $a(Compare-Object -IncludeEqual $a $a) | Get-MemberInputObject SideIndicator----------- ------------- True == TypeName: System.Management.Automation.PSCustomObjectName MemberType Definition---- ---------- ----------Equals Method bool Equals(System.Object obj)GetHashCode Method int GetHashCode()GetType Method type GetType()ToString Method string ToString()InputObject NoteProperty System.Boolean InputObject=TrueSideIndicator NoteProperty string SideIndicator===Compare-Object -IncludeEqual $a $a -PassThru(Compare-Object -IncludeEqual $a $a -PassThru) | Get-MemberTrue TypeName: System.BooleanName MemberType Definition---- ---------- ----------CompareTo Method int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(SystEquals Method bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable.Equals(bool otGetHashCode Method int GetHashCode()GetType Method type GetType()GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)ToInt16 Method short IConvertible.ToInt16(System.IFormatProvider provider)ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)ToString Method string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.ToToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)ToUInt16 Method ushort IConvertible.ToUInt16(System.IFormatProvider provider)ToUInt32 Method uint IConvertible.ToUInt32(System.IFormatProvider provider)ToUInt64 Method ulong IConvertible.ToUInt64(System.IFormatProvider provider)TryFormat Method bool TryFormat(System.Span destination, int charsWritten)SideIndicator NoteProperty string SideIndicator===

Ao usar o parâmetro PassThru, o tipo de objeto original (System.Boolean) é retornado. Note como a saída exibida pelo formato padrão para objetos System.Boolean não exibiu a propriedadeSideIndicator. Entretanto, o objeto System.Boolean retornado tem a propriedadeNoteProperty.

Example 4 – Comparar dois objetos simples usando propriedades

Neste exemplo, comparamos duas strings diferentes que têm o mesmo comprimento.

Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqualLength SideIndicator------ ------------- 3 ==

Example 5 – Comparar objetos complexos usando propriedades

Este exemplo mostra o comportamento ao comparar objetos complexos. Neste exemplo nós armazenamos dois objetos de processo diferentes para diferentes instâncias do PowerShell. Ambas as variáveis contêm processbjects com o mesmo nome. Quando os objetos são comparados sem especificar o parâmetro de propriedades, o cmdlet considera os objetos como iguais. Note que o valor do objetoInputObject é o mesmo que o resultado do método ToString(). Como a classe System.Diagnostics.Process não tem a interface IComparable, o cmdletconverte os objetos para strings e compara os resultados.

PS> Get-Process pwsh NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 101 123.32 139.10 35.81 11168 1 pwsh 89 107.55 66.97 11.44 17600 1 pwshPS> $a = Get-Process -Id 11168PS> $b = Get-Process -Id 17600PS> $a.ToString()System.Diagnostics.Process (pwsh)PS> $b.ToString()System.Diagnostics.Process (pwsh)PS> Compare-Object $a $b -IncludeEqualInputObject SideIndicator----------- -------------System.Diagnostics.Process (pwsh) ==PS> Compare-Object $a $b -Property ProcessName, Id, CPUProcessName Id CPU SideIndicator----------- -- --- -------------pwsh 17600 11.4375 =>pwsh 11168 36.203125 <=

Quando você especifica propriedades a serem comparadas, o cmdlet mostra as diferenças.

Exemplo 6 – Comparando objetos complexos que implementam o IComparable

Se o objeto implementa o IComparable, o cmdlet procura formas de comparar os objetos. Se os objetos são de tipos diferentes, o objeto Diferença é convertido para o tipo do objetoReferenceObject e então comparado.

Neste exemplo, estamos comparando uma string com um objeto TimeSpan. No primeiro caso, a string é convertida para um TimeSpan para que os objetos sejam iguais.

Compare-Object ("0:0:1") "0:0:1" -IncludeEqualInputObject SideIndicator----------- -------------00:00:01 ==Compare-Object "0:0:1" ("0:0:1")InputObject SideIndicator----------- -------------00:00:01 =>0:0:1 <=

No segundo caso, o TimeSpan é convertido para uma string para que o objeto seja diferente.

Parametros

-CaseSensitive

Indica que as comparações devem ser sensíveis a maiúsculas e minúsculas.

Tipo: SwitchParameter
Posição: Nome:
Valor por defeito: Falso
Aceitar entrada de gasoduto: Falso
Aceitar caracteres wildcard: Falso
Cultura

Especifica a cultura a usar para comparações.

Tipo: Calça
Posição: Nomeado
Valor por defeito: Nenhum
Aceitar entrada de tubagem: Falso
Aceitar caracteres wildcard: Falso
DiferençaObjecto

Especifica os objectos que são comparados com os objectos de referência.

Tipo: PSObject
Posição: >1
Valor por defeito: Nenhum
Aceitar entrada do pipeline: Verdade
Aceitar caracteres wildcard: Falso
-ExcluirDiferente

Indica que este cmdlet mostra apenas as características dos objectos comparados que são iguais. As diferenças entre os objetos são descartadas.

Use ExcludeDifferent with IncludeEqual para exibir apenas as linhas que correspondem entre os objetos de referência e os objetos de diferença.

Se ExcludeDifferent for especificado sem IncludeEqual, não há saída.

Type: SwitchParameter
Position: Named
Valor por defeito: False
Aceptar entrada do pipeline: Falso
Aceitar caracteres wildcard: Falso
-IncluirIgual

IncluirIgual exibe as correspondências entre os objectos de referência e os objectos de diferença.

Por defeito, a saída também inclui as diferenças entre os objectos de referência e os objectos de diferença.

Type: SwitchParameter
Position: Named
Valor por defeito: Falso
Aceitar entrada da conduta: Falso
Aceitar caracteres wildcard: Falso
-PassThru

Quando você usa o parâmetro PassThru, Compare-Object omite o PSCustomObject wrapperaround dos objetos comparados e retorna os diferentes objetos, inalterados.

Type: SwitchParameter
Position: Named
Valor por defeito: False
Aceptar entrada do pipeline: Falso
Aceitar caracteres wildcard: Falso
-Propriedade

Especifica um conjunto de propriedades dos objectos de referência e de diferença a comparar.

O valor do parâmetro Propriedade pode ser uma nova propriedade calculada. A propriedade calculada pode ser um bloco de script ou uma tabela hash. Pares de valores chave válidos são:

  • Expressão – <string> ou <script block>

Para mais informações, veja sobre as Propriedades_Calculadas.

Tipo: Objecto:
Posição: Nome:
Valor por defeito: Nenhum
Aceitar entrada do pipeline: Falso
Aceitar caracteres wildcard: Falso
ReferênciaObjecto

Especifica um conjunto de objectos usados como referência para comparação.

Type: PSObject
Posição: >0
Valor por defeito: Nenhum
Aceitar entrada do pipeline: Falso
Aceitar caracteres wildcard: Falso
SyncWindow

Especifica o número de objectos adjacentes que Compare-Object inspecciona enquanto procura uma correspondência numa colecção de objectos. Compare-Object examina objetos adjacentes quando não encontra o objeto na mesma posição em uma coleção. O valor padrão é ::MaxValue, o que significa queCompare-Object examina toda a coleção de objetos.

Tipo: Int32
Posição: Nome
Valor padrão: ::Valor Máximo
Aceitar entrada do pipeline: Falso
Aceitar caracteres wildcard: Falso

Entradas

SpObjecto

Pode enviar um objecto pelo pipeline para o parâmetro DifferenceObject.

Entradas

Nenhum

Se o objeto de referência e o objeto de diferença forem os mesmos, não há output, sem usar o parâmetro IncludeEqual.

PSCustomObject

Se os objectos são diferentes, Compare-Object envolve os diferentes objectos num PSCustomObjectwrapper com uma propriedade SideIndicator para referenciar as diferenças.

Quando utiliza o parâmetro PassThru, o Tipo do objecto não é alterado mas a instância do objecto retornado tem um NoteProperty chamado SideIndicator adicionado. SideIndicator mostra a que objeto de entrada a saída pertence.

Notes

Ao usar o parâmetro PassThru, a saída exibida no console pode não incluir a propriedadeSideIndicator. A vista de formato padrão da saída para o tipo de objeto porCompare-Object não inclui a propriedade SideIndicator. Para mais informações vejaExemplo 3 neste artigo.

  • sobre_Propriedades_Calculadas
  • ParaEach-Object
  • Group-Object
  • Measure-Object
  • New-Objeto
  • Select-Object
  • Sort-Object
  • Tee-Object
  • Where-Object
  • >

  • Get-Process

Deixe uma resposta

O seu endereço de email não será publicado.