Está a ter dificuldades em compreender os operadores de comparação do PowerShell, como eq
, ne
, ceq
e cne
? Se sim, continue a ler.
Vindo de um fundo de desenvolvimento de software, o primeiro momento em que fiquei confuso foi quando vi pela primeira vez os operadores de comparação do PowerShell, como eq
, ceq
, cne
, etc. Todas as outras linguagens têm operadores de comparação, mas não exatamente como o PowerShell. Eu estava habituado ao ==
e ao <>
.
Não só a sintaxe parece completamente diferente das típicas linguagens de programação, mas também se comportam de maneira diferente ao comparar coleções de valores.
É algo que realmente me atrapalhou ao aprender sobre o PowerShell, mas agora parece ser como aquele velho ditado sobre cerveja; é um gosto adquirido.
Vamos passar brevemente pelo que é um operador de comparação, se não estiver familiarizado, e aprofundar nas nuances que o PowerShell introduz. Em breve, será capaz de utilizar os operadores nos seus scripts do PowerShell sem qualquer problema.
Como mencionei, todas as linguagens de programação/script têm operadores de comparação. No seu sentido mais básico, os operadores de comparação são necessários para avaliar como diferentes coisas se comparam umas às outras. São usados para comparar dois objetos e ver qual é a diferença (se houver) entre esses dois objetos.
No caso do PowerShell, os operadores também podem ser usados para encontrar elementos dentro de coleções de valores.
Para esta postagem, vou abordar os operadores de igualdade e como o PowerShell os utiliza. Estes são eq
e ne
com seus equivalentes sensíveis a maiúsculas e minúsculas, ceq
e cne
. Para uma lista completa, você pode visitar o site Technet ou simplesmente usar Get-Help about_comparison_operators
no seu console PowerShell.
PowerShell -EQ e -CEQ
Se você precisar verificar se um objeto é igual a outro, é necessário usar os operadores eq
(insensível a maiúsculas/minúsculas) ou ceq
(sensível a maiúsculas/minúsculas). Esses operadores testam o valor de cada entidade que você deseja comparar.
Quando comecei a aprender o PowerShell, costumava fazer algo assim
Você logo perceberá que não deve fazer isso. O sinal =
é um operador de atribuição, NÃO um operador de comparação. Você não pode usar o sinal =
para comparar um valor com outro.
A maneira correta de fazer isso é definir o valor a ser verificado no lado esquerdo da expressão e usar o operador eq
. Aqui está um exemplo dos operadores eq
e ceq
e como eles são usados.

Observe como eq
retornou um valor booleano True
ao comparar nossa variável com adam
, mas ceq
retornou um valor booleano False
? Isso mostra a diferença de sensibilidade a maiúsculas/minúsculas entre os dois operadores.
Isso é tudo muito bom para valores escalares (únicos), mas você também pode encontrar todas as instâncias de valores específicos usando esses operadores também. Por exemplo, use o operador -eq do PowerShell para filtrar itens em uma matriz:

Se você tem uma variável com uma coleção de valores como uma matriz, você pode usar eq
e ceq
para encontrar todas as instâncias de valores dentro da coleção.
Note que ele encontrou todas as instâncias do número inteiro 9 que tentamos comparar. Eu uso este método útil o tempo todo.
-NE e -CNE
Por outro lado, você tem tanto ne
quanto cne
. Eles são exatamente o oposto de eq
e ceq
, mas exibem o mesmo comportamento, apenas oposto. Eles não testam a igualdade, eles testam a desigualdade.

I hope this gives a good explanation of the equality comparison operators. This really got me hung up as a newbie and it never really clicked for me until I was just beat into submission by error messages. I hope this post prevents the same beat down I received.