Olá pessoal, tudo bem? Espero que sim!
Hoje vamos continuar a nossa jornada de introdução ao Powershell abordando os Operadores de Comparação que inclusive, já foram utilizados em alguns exemplos e scripts disponibilizados aqui no blog, então, nada mais justo que entrarmos no detalhe.
O que são Operadores de Comparação?
Os Operadores de Comparação são instruções lógicas que nos permite comparar valores de objetos, matriz, listas ou tabelas e são comumente utilizados para a criação de testes lógicos com o objetivo de encontrar ou filtrar um valor, cadeia de valores ou mesmo objetos. Eles são classificados por tipo e são declarados precedidos por hífen (“–“). Na tabela abaixo, você irá conhecer os operadores e seus respectivos tipos:
Tipo | Operador | Descrição |
Igualdade | -eq | É igual a |
-ne | Não é igual | |
-gt | Maior que | |
-ge | Maior ou igual | |
-lt | Menor que | |
-le | Menor ou igual | |
Correspondência | -like | Retorna TRUE (verdadeiro) quando a string (texto) corresponde a curinga (wildcard) |
-notlike | Retorna TRUE (verdadeiro) quando a string (texto) não corresponde a curinga (wildcard) | |
-match | Retorna TRUE (verdadeiro) quando a string (texto) corresponde a regex (expressão regular) | |
-notmatch | Retorna TRUE (verdadeiro) quando a string (texto) não corresponde a regex (expressão regular) | |
Conteúdo | -contains | Retorna TRUE (verdadeiro) quando o valor de referência estiver contido em uma coleção |
-notcontains | Retorna TRUE (verdadeiro) quando o valor de referência não estiver contido em uma coleção | |
-in | Retorna TRUE (verdadeiro) quando o valor do teste contido em uma coleção | |
-notin | Retorna TRUE (verdadeiro) quando o valor do teste não está contido em uma coleção | |
Substituição | -replace | Substitui um padrão de string (texto) |
Divisão | -split | Divide uma ou mais seqüências de caracteres em substrings |
Tipos de Objeto | -is | Retorna TRUE (verdadeiro) se ambos os objetos forem iguais |
-isnot | Retorna TRUE (verdadeiro) se os objetos não forem iguais |
Operadores de Igualdade
Os operadores de igualdade comparam se valores de entrada possuem correspondência exatamente idêntica (no caso de -eq e -ne) a outro valor ou objeto. Também podem realizar comparações por ordem de grandeza (no caso de -gt, -lt), ou combiná-la com o critério igualdade (no caso de -ge ou -le).
-eq (Igual a)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Teste de igualdade de número inteiro PS C:\Users\RobotChicken> $valor = 500 PS C:\Users\RobotChicken> $valor -eq 500 True # Teste de igualdade de string (texto) PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -eq "Hello World" True # Teste de igualdade de cadeia de valores PS C:\Users\RobotChicken> $valor = "Hello World", 500 PS C:\Users\RobotChicken> $valor -eq "Hello World" Hello World PS C:\Users\RobotChicken> $valor -eq 500 500 |
-ne (Não igual a)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Teste de não igualdade de número inteiro PS C:\Users\RobotChicken> $valor = 500 PS C:\Users\RobotChicken> $valor -ne 500 False # Teste de não igualdade de string (texto) PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -ne "Bye World" True # Teste de não igualdade de cadeia de valores PS C:\Users\RobotChicken> $valor = "Hello World", 500 PS C:\Users\RobotChicken> $valor -ne "Hello World" 500 PS C:\Users\RobotChicken> $valor -ne 500 Hello World |
-gt (Maior que)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Teste de maioridade de valor inteiro PS C:\Users\RobotChicken> $valor = 100 PS C:\Users\RobotChicken> $valor -gt 15 True PS C:\Users\RobotChicken> $valor -gt 1000 False # Teste de maioridade de cadeia de caracteres PS C:\Users\RobotChicken> $valor = "Abcdefg" PS C:\Users\RobotChicken> $valor -gt "Abcde" True PS C:\Users\RobotChicken> $valor -gt "Abcdefgh" False |
-ge (Maior que ou igual a)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Teste de maioridade ou igualdade de valor PS C:\Users\RobotChicken> $valor = 500 PS C:\Users\RobotChicken> $valor -ge 1000 False PS C:\Users\RobotChicken> $valor -ge 400 True # Teste de maioridade ou igualdade de valor string (texto) PS C:\Users\RobotChicken> $valor = "Abcdef" PS C:\Users\RobotChicken> $valor -ge "Abcdef" True PS C:\Users\RobotChicken> $valor -ge "Abcde" True PS C:\Users\RobotChicken> $valor -ge "Abcdefgh" False |
-lt (Menor que)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Teste de minoridade de valor inteiro PS C:\Users\RobotChicken> $valor = 100 PS C:\Users\RobotChicken> $valor -lt 15 False PS C:\Users\RobotChicken> $valor -lt 1000 True # Teste de minoridade de cadeia de caracteres PS C:\Users\RobotChicken> $valor = "Abcdefg" PS C:\Users\RobotChicken> $valor -lt "Abcde" False PS C:\Users\RobotChicken> $valor -lt "Abcdefgh" True |
-le (Menor que ou igual a)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Teste de minoridade ou igualdade de valor PS C:\Users\RobotChicken> $valor = 500 PS C:\Users\RobotChicken> $valor -le 1000 True PS C:\Users\RobotChicken> $valor -le 400 False # Teste de minoridade ou igualdade de valor string (texto) PS C:\Users\RobotChicken> $valor = "Abcdef" PS C:\Users\RobotChicken> $valor -le "Abcdef" True PS C:\Users\RobotChicken> $valor -le "Abcde" False PS C:\Users\RobotChicken> $valor -le "Abcdefgh" True |
Operadores de Correspondência
Os operadores de correspondência encontram valores baseados em expressões, que retornarão o valor procurado utilizando o caractere wildcard (curinga) “*” (no caso de -like e -notlike) ou expressões regulares (no caso de -match e -notmatch), que retornarão um valor booleano (Verdadeiro ou Falso). No caso do uso de -match ou -notmatch, é possível consultar os valores correspondidos da busca através da variável $Matches, gerada automaticamente após a execução do teste lógico. Assim como nos outros testes que retornam valores booleanos, quando mais de um valor é declarado como entrada para o teste, o valor procurado será retornado se for encontrado.
Obs: Abordaremos Expressões Regulares em um próximo post.
-like (É como)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Teste de correspondência simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -like "Hello" False PS C:\Users\RobotChicken> $valor -like "Hello*" True # Teste de correspondência em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -like "Hello*" Hello World PS C:\Users\RobotChicken> $valor -like "*World" Hello World Bye World |
-notlike (Não é como)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Teste de não correspondência simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -notlike "Hello*" False PS C:\Users\RobotChicken> $valor -notlike "Bye*" True # Teste de não correspondência em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -notlike "Hello*" Bye World PS C:\Users\RobotChicken> $valor -notlike "*Bye*" Hello World |
-match (Combina)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Teste de combinação de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -match "Hello" True PS C:\Users\RobotChicken> $valor -match "Bye" False # Teste de combinação em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -match "Hello" Hello World PS C:\Users\RobotChicken> $valor -match "Bye" Bye World |
-notmatch (Não combina)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Teste de não combinação de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -notmatch "Hello" False PS C:\Users\RobotChicken> $valor -notmatch "Bye" True # Teste de não combinação em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -notmatch "Hello" Bye World PS C:\Users\RobotChicken> $valor -notmatch "Bye" Hello World |
Operadores de Conteúdo
Os operadores de conteúdo indicarão se o valor procurado se faz presente no objeto de pesquisa. O valor retornado sempre será booleano (Verdadeiro ou Falso).
-contains (Contém)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Teste de existência de conteúdo de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -contains "Hello" False PS C:\Users\RobotChicken> $valor -contains "Hello World" True # Teste de existência de conteúdo em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -contains "Hello" False PS C:\Users\RobotChicken> $valor -contains "Hello World" True PS C:\Users\RobotChicken> $valor -contains "Bye" False PS C:\Users\RobotChicken> $valor -contains "Bye World" True |
-notcontains (Não contém)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Teste de não existência de conteúdo de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -notcontains "Hello" True PS C:\Users\RobotChicken> $valor -notcontains "Hello World" False # Teste de não existência de conteúdo em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -notcontains "Hello" True PS C:\Users\RobotChicken> $valor -notcontains "Hello World" False PS C:\Users\RobotChicken> $valor -notcontains "Bye" True PS C:\Users\RobotChicken> $valor -notcontains "Bye World" False |
-in (Está em)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Teste de instância de conteúdo de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> "Hello" -in $valor False PS C:\Users\RobotChicken> "Hello World" -in $valor True # Teste de instância de conteúdo em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> "Hello" -in $valor False PS C:\Users\RobotChicken> "Hello World" -in $valor True PS C:\Users\RobotChicken> "Bye" -in $valor False PS C:\Users\RobotChicken> "Bye World" -in $valor True |
-notin (Não está em)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Teste de não instância de conteúdo de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> "Hello" -notin $valor True PS C:\Users\RobotChicken> "Hello World" -notin $valor False # Teste de não instância de conteúdo em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> "Hello" -notin $valor True PS C:\Users\RobotChicken> "Hello World" -notin $valor False PS C:\Users\RobotChicken> "Bye" -notin $valor True PS C:\Users\RobotChicken> "Bye World" -notin $valor False |
Operadores de Substituição
Os operadores de substituição são utilizados para substituir um valor encontrado por outro.
-replace (Substituir)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Teste de substituição de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -replace "Hello","Bye" Bye World # Teste de substituição em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -replace "Hello", "Bye" Bye World Bye World PS C:\Users\RobotChicken> $valor -replace "World", "Earth" Hello Earth Bye Earth |
Operadores de Divisão
Os operadores de divisão são utilizados para dividir ou quebrar a linha a cada vez que encontrar um caractere especificado.
-split (Dividir)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# Teste de separação de valor simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -split " " Hello World PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -split "0" H e l l o W o r l d # Teste de separação em uma array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -split " " Hello World Bye World PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0","B0y0e0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -split "0" H e l l o W o r l d B y e W o r l d |
Operadores de Comparação de Tipos de Objetos
Recapitulando, conforme abordado no post #7, existem diversos tipos de valores para parâmetros de Funções. Estes mesmos tipos valores também estão disponíveis para uma propriedade em um Objeto. Vamos relembrar quais são observando a tabela abaixo:
[int] | Inteiro assinado de 32 bits |
[long] | Inteiro assinado de 64 bits |
[string] | Cadeia de comprimento fixo de caracteres Unicode |
[char] | Caractere Unicode de 16 bits |
[bool] | Valor Verdadeiro ou Falso |
[byte] | Inteiro não assinado de 8 bits |
[double] | Número de ponto flutuante de precisão dupla de 64 bits |
[decimal] | Valor decimal de 128 bits |
[single] | Número de ponto flutuante de 32 bits de precisão simples |
[array] | Matriz de valores |
[xml] | Objeto de Documento XML |
[hashtable] | Objeto Hashtable (semelhante a um objeto Dicionário) |
Os operadores de comparação de tipos de objetos são utilizados para determinar se um objeto é de um tipo específico.
-is (É)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Teste de comparação de tipo de objeto simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -is [string] True PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -is [int] False PS C:\Users\RobotChicken> $valor = 1000 PS C:\Users\RobotChicken> $valor -is [int] True # Teste de comparação de tipo de objeto em array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -is [array] True PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0","B0y0e0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -is [hashtable] False PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0","B0y0e0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -is [array] True |
-isnot (Não é)
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Teste de comparação negativa de tipo de objeto simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -isnot [string] False PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -isnot [int] True PS C:\Users\RobotChicken> $valor = 1000 PS C:\Users\RobotChicken> $valor -isnot [int] False # Teste de comparação negativa de tipo de objeto em array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -isnot [array] False PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0","B0y0e0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -isnot [hashtable] True PS C:\Users\RobotChicken> $valor = "H0e0l0l0o0 0W0o0r0l0d0","B0y0e0 0W0o0r0l0d0" PS C:\Users\RobotChicken> $valor -isnot [array] False |
Case Sensitive (maiúsculas e minúsculas)
Você pode se deparar em algum caso em que precise realizar um teste lógico que requer um refinamento maior, em alguns casos considerando as letras maiúsculas e minúsculas. No caso de todos os operadores de comparação, você pode habilitar o case sensitive adicionando a letra “c” no início de cada operador, por exemplo: -ceq, -cne, -clike, -ccontains, -cmatch, -cis, etc. Com exceção dos operadores de comparação de tipos de objetos, se você obrigatoriamente não quer utilizar case sensitive, você pode utilizar a letra “i” no início de cada operador, por exemplo: -ieq, -ine, -ilike, -icontains, -imatch, etc.
Exemplos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# Teste de Case Sensitive em objeto simples PS C:\Users\RobotChicken> $valor = "Hello World" PS C:\Users\RobotChicken> $valor -ceq "Hello World" True PS C:\Users\RobotChicken> $valor -ceq "hello world" False PS C:\Users\RobotChicken> $valor -ieq "hello world" True PS C:\Users\RobotChicken> $valor = "Bye World" PS C:\Users\RobotChicken> $valor -clike "bye*" False PS C:\Users\RobotChicken> $valor -clike "*World" True PS C:\Users\RobotChicken> $valor -ilike "bye*" True # Teste de Case Sensitive em array PS C:\Users\RobotChicken> $valor = "Hello World", "Bye World" PS C:\Users\RobotChicken> $valor -cne "bye world", "hello world" Hello World Bye World PS C:\Users\RobotChicken> $valor -cne "Hello World" Bye World PS C:\Users\RobotChicken> $valor -ine "hello world" Bye World PS C:\Users\RobotChicken> $valor -cnotlike "*world" Hello World Bye World PS C:\Users\RobotChicken> $valor -cnotlike "*World" PS C:\Users\RobotChicken> $valor -inotlike "hello*" Bye World |
Conclusão
Não existem muitas restrições na hora de utilizar os Operadores de Comparação. Eles te permitem recuperar valores em quaisquer objetos manipuláveis pelo Powershell e são peças-chave para realizar uma instrução de operação em massa. Quando estiver com alguma dúvida ou precisar de mais informações sobre o tema, você pode executar o seguinte script em seu shell:
1 2 3 4 |
# Atualizar Ajuda e retornar o conteúdo de operadores de comparação Update-Help Get-Help about_Comparison_Operators |
É isso aí galera, por hoje é só. Até o próximo post!
Gostou ou ainda está com dúvidas? Deixe seu comentário!
Não se esqueçam de curtir a página do blog no Facebook aqui na barra lateral!
Dúvidas sobre o blog, sugestões, críticas? Entre em contato aqui!