Sobre operadores de comparação

Descrição breve

Descreve os operadores que comparam valores no PowerShell.

Descrição longa

Os operadores de comparação permitem que você especifique condições para comparar valores e localizar valores que correspondam aos padrões especificados. Para usar um operador de comparação, especifique os valores que você deseja comparar com um operador que separa esses valores.

O PowerShell inclui os seguintes operadores de comparação:

Tipo Operadores Descrição
Igualitário -eq equals
-ne não é igual a
-gt maior que
-ge maior ou igual
-lt menor que
-le menor ou igual
Matching -like Retorna true quando a cadeia de caracteres corresponde a curinga
pattern
-notlike Retorna true quando a cadeia de caracteres não corresponde
padrão curinga
-match Retorna true quando a cadeia de caracteres corresponde ao regex
padrão; $matches contém cadeias de caracteres correspondentes
-notmatch Retorna true quando a cadeia de caracteres não corresponde
padrão regex; $matches contém correspondência
cadeias de caracteres
Contenção -contains Retorna true quando o valor de referência contido
em uma coleção
-notcontains Retorna true quando o valor de referência não
contido em uma coleção
-in Retorna true quando o valor de teste contido em um
collection
-notin Retorna true quando o valor de teste não está contido
em uma coleção
Substituição -replace Substitui um padrão de cadeia de caracteres
Tipo -is Retorna true se ambos os objetos forem os mesmos
type
-isnot Retornará true se os objetos não forem os mesmos
type

Por padrão, todos os operadores de comparação não diferenciam maiúsculas de minúsculas. Para tornar um operador de comparação que diferencia maiúsculas de minúsculas, preceda o nome do operador com um c. Por exemplo, a versão que diferencia maiúsculas de minúsculas -eq é -ceq. Para tornar a insensibilidade de maiúsculas de minúsculas explícita, preceda o operador com um i. Por exemplo, a versão explicitamente sem diferenciação de maiúsculas de minúsculas -eq é -ieq.

Quando a entrada para um operador é um valor escalar, os operadores de comparação retornam um valor booliano. Quando a entrada é uma coleção de valores, os operadores de comparação retornam valores correspondentes. Se não houver correspondências em uma coleção, os operadores de comparação retornarão uma matriz vazia.

PS> (1, 2 -eq 3).GetType().FullName
System.Object[]

As exceções são os operadores de contenção, os operadores In e os operadores de tipo, que sempre retornam um valor booliano .

Observação

Se você precisar comparar um valor com $null você deve colocar $null no lado esquerdo da comparação. Quando você compara com $null um Objeto[] o resultado é False porque o objeto de comparação é uma matriz. Quando você compara uma matriz com $null, a comparação filtra todos $null os valores armazenados na matriz. Por exemplo:

PS> $null -ne $null, "hello"
True
PS> $null, "hello" -ne $null
hello

Operadores de igualdade

Os operadores de igualdade (-eq, -ne) retornam um valor true ou as correspondências quando um ou mais dos valores de entrada são idênticos ao padrão especificado. Todo o padrão deve corresponder a um valor inteiro.

Exemplo:

-eq

Descrição: igual a. Inclui um valor idêntico.

Exemplo:

PS> 2 -eq 2
True

PS> 2 -eq 3
False

PS> 1,2,3 -eq 2
2
PS> "abc" -eq "abc"
True

PS> "abc" -eq "abc", "def"
False

PS> "abc", "def" -eq "abc"
abc

-ne

Descrição: não é igual a. Inclui um valor diferente.

Exemplo:

PS> "abc" -ne "def"
True

PS> "abc" -ne "abc"
False

PS> "abc" -ne "abc", "def"
True

PS> "abc", "def" -ne "abc"
def

-gt

Descrição: maior que.

Exemplo:

PS> 8 -gt 6
True

PS> 7, 8, 9 -gt 8
9

Observação

Isso não deve ser confundido com >o operador maior do que em muitas outras linguagens de programação. No PowerShell, > é usado para redirecionamento. Para obter mais informações, consulte About_redirection.

-ge

Descrição: maior ou igual a.

Exemplo:

PS> 8 -ge 8
True

PS> 7, 8, 9 -ge 8
8
9

-lt

Descrição: menor que.

Exemplo:


PS> 8 -lt 6
False

PS> 7, 8, 9 -lt 8
7

-le

Descrição: menor ou igual a.

Exemplo:

PS> 6 -le 8
True

PS> 7, 8, 9 -le 8
7
8

Operadores correspondentes

Os operadores like (-like e -notlike) encontram elementos que correspondem ou não correspondem a um padrão especificado usando expressões curinga.

A sintaxe do é:

<string[]> -like <wildcard-expression>
<string[]> -notlike <wildcard-expression>

Os operadores de correspondência (-match e -notmatch) encontram elementos que correspondem ou não correspondem a um padrão especificado usando expressões regulares.

Os operadores de correspondência preenchem a $Matches variável automática quando a entrada (o argumento do lado esquerdo) para o operador é um único objeto escalar. Quando a entrada é escalar, e os -match-notmatch operadores retornam um valor booliano e definem o valor da $Matches variável automática para os componentes correspondentes do argumento.

A sintaxe do é:

<string[]> -match <regular-expression>
<string[]> -notmatch <regular-expression>

-like

Descrição: corresponder usando o caractere curinga (*).

Exemplo:

PS> "PowerShell" -like "*shell"
True

PS> "PowerShell", "Server" -like "*shell"
PowerShell

-notlike

Descrição: não corresponde ao uso do caractere curinga (*).

Exemplo:

PS> "PowerShell" -notlike "*shell"
False

PS> "PowerShell", "Server" -notlike "*shell"
Server

-match

Descrição: corresponde a uma cadeia de caracteres usando expressões regulares. Quando a entrada é escalar, ela preenche a $Matches variável automática.

Se a entrada for uma coleção, os operadores e -notmatch os -match operadores retornarão os membros correspondentes dessa coleção, mas o operador não preencherá a $Matches variável.

Por exemplo, o comando a seguir envia uma coleção de cadeias de caracteres para o -match operador. O -match operador retorna os itens na coleção que correspondem. Ele não preenche a $Matches variável automática.

PS> "Sunday", "Monday", "Tuesday" -match "sun"
Sunday

PS> $Matches
PS>

Por outro lado, o comando a seguir envia uma única cadeia de caracteres para o -match operador. O -match operador retorna um valor booliano e popula a $Matches variável automática. A $Matches variável automática é um Hashtable. Se nenhum agrupamento ou captura for usado, apenas uma chave será preenchida. A 0 chave representa todo o texto correspondente. Para obter mais informações sobre agrupamento e captura usando expressões regulares, consulte about_Regular_Expressions.

PS> "Sunday" -match "sun"
True

PS> $Matches

Name                           Value
----                           -----
0                              Sun

É importante observar que o $Matches hashtable conterá apenas a primeira ocorrência de qualquer padrão correspondente.

PS> "Banana" -match "na"
True

PS> $Matches

Name                           Value
----                           -----
0                              na

Importante

A 0 chave é um Inteiro. Você pode usar qualquer método Hashtable para acessar o valor armazenado.

PS> "Good Dog" -match "Dog"
True

PS> $Matches[0]
Dog

PS> $Matches.Item(0)
Dog

PS> $Matches.0
Dog

O -notmatch operador preenche a $Matches variável automática quando a entrada é escalar e o resultado é False, que ele, quando detecta uma correspondência.

PS> "Sunday" -notmatch "rain"
True

PS> $matches
PS>

PS> "Sunday" -notmatch "day"
False

PS> $matches

Name                           Value
----                           -----
0                              day

-notmatch

Descrição: não corresponde a uma cadeia de caracteres. Usa expressões regulares. Quando a entrada é escalar, ela preenche a $Matches variável automática.

Exemplo:

PS> "Sunday" -notmatch "sun"
False

PS> $matches
Name Value
---- -----
0    sun

PS> "Sunday", "Monday" -notmatch "sun"
Monday

Operadores de contenção

Os operadores de contenção (-contains e -notcontains) são semelhantes aos operadores de igualdade. No entanto, os operadores de contenção sempre retornam um valor booliano, mesmo quando a entrada é uma coleção.

Além disso, ao contrário dos operadores de igualdade, os operadores de contenção retornam um valor assim que detectam a primeira correspondência. Os operadores de igualdade avaliam todas as entradas e retornam todas as correspondências na coleção.

-contains

Descrição: operador de contenção. Informa se uma coleção de valores de referência inclui um único valor de teste. Sempre retorna um valor booliano. Retorna TRUE somente quando o valor de teste corresponde exatamente a pelo menos um dos valores de referência.

Quando o valor de teste é uma coleção, o operador Contains usa a igualdade de referência. Ele retorna TRUE somente quando um dos valores de referência é a mesma instância do objeto de valor de teste.

Em uma coleção muito grande, o -contains operador retorna resultados mais rápidos do que o operador igual a.

Sintaxe:

<Reference-values> -contains <Test-value>

Exemplos:

PS> "abc", "def" -contains "def"
True

PS> "Windows", "PowerShell" -contains "Shell"
False  #Not an exact match

# Does the list of computers in $DomainServers include $ThisComputer?
PS> $DomainServers -contains $thisComputer
True

PS> "abc", "def", "ghi" -contains "abc", "def"
False

PS> $a = "abc", "def"
PS> "abc", "def", "ghi" -contains $a
False
PS> $a, "ghi" -contains $a
True

-notcontains

Descrição: operador de contenção. Informa se uma coleção de valores de referência inclui um único valor de teste. Sempre retorna um valor booliano. Retorna TRUE quando o valor de teste não é uma correspondência exata para pelo menos um dos valores de referência.

Quando o valor de teste é uma coleção, o operador NotContains usa a igualdade de referência.

Sintaxe:

<Reference-values> -notcontains <Test-value>

Exemplos:

PS> "Windows", "PowerShell" -notcontains "Shell"
True  #Not an exact match

# Get cmdlet parameters, but exclude common parameters
function get-parms ($cmdlet)
{
    $Common = "Verbose", "Debug", "WarningAction", "WarningVariable",
      "ErrorAction", "ErrorVariable", "OutVariable", "OutBuffer"

    $allparms = (Get-Command $Cmdlet).parametersets |
      foreach {$_.Parameters} |
        foreach {$_.Name} | Sort-Object | Get-Unique

    $allparms | where {$Common -notcontains $_ }
}

# Find unapproved verbs in the functions in my module
PS> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS> $myVerbs = Get-Command -Module MyModule | foreach {$_.verb}
PS> $myVerbs | where {$ApprovedVerbs -notcontains $_}
ForEach
Sort
Tee
Where

-in

Descrição: no operador. Informa se um valor de teste aparece em uma coleção de valores de referência. Sempre retorne como valor booliano. Retorna TRUE somente quando o valor de teste corresponde exatamente a pelo menos um dos valores de referência.

Quando o valor de teste é uma coleção, o operador In usa a igualdade de referência. Ele retorna TRUE somente quando um dos valores de referência é a mesma instância do objeto de valor de teste.

O -in operador foi introduzido no PowerShell 3.0.

Sintaxe:

<Test-value> -in <Reference-values>

Exemplos:

PS> "def" -in "abc", "def"
True

PS> "Shell" -in "Windows", "PowerShell"
False  #Not an exact match

PS> "Windows" -in "Windows", "PowerShell"
True  #An exact match

PS> "Windows", "PowerShell" -in "Windows", "PowerShell", "ServerManager"
False  #Using reference equality

PS> $a = "Windows", "PowerShell"
PS> $a -in $a, "ServerManager"
True  #Using reference equality

# Does the list of computers in $DomainServers include $ThisComputer?
PS> $thisComputer -in  $domainServers
True

-notin

Descrição: informa se um valor de teste aparece em uma coleção de valores de referência. Sempre retorna um valor booliano. Retorna TRUE quando o valor de teste não é uma correspondência exata para pelo menos um dos valores de referência.

Quando o valor de teste é uma coleção, o operador In usa a igualdade de referência. Ele retorna TRUE somente quando um dos valores de referência é a mesma instância do objeto de valor de teste.

O -notin operador foi introduzido no PowerShell 3.0.

Sintaxe:

<Test-value> -notin <Reference-values>

Exemplos:

PS> "def" -notin "abc", "def"
False

PS> "ghi" -notin "abc", "def"
True

PS> "Shell" -notin "Windows", "PowerShell"
True  #Not an exact match

PS> "Windows" -notin "Windows", "PowerShell"
False  #An exact match

# Find unapproved verbs in the functions in my module
PS> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS> $MyVerbs = Get-Command -Module MyModule | foreach {$_.verb}

PS> $MyVerbs | where {$_ -notin $ApprovedVerbs}
ForEach
Sort
Tee
Where

Operador de substituição

O -replace operador substitui todo ou parte de um valor pelo valor especificado usando expressões regulares. Você pode usar o -replace operador para muitas tarefas administrativas, como renomear arquivos. Por exemplo, o comando a seguir altera as extensões de nome de arquivo de todos os arquivos .txt para .log:

Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }

A sintaxe do operador é a -replace seguinte, em que o <original> espaço reservado representa os caracteres a serem substituídos e o <substitute> espaço reservado representa os caracteres que os substituirão:

<input> <operator> <original>, <substitute>

Por padrão, o -replace operador não diferencia maiúsculas de minúsculas. Para diferenciar maiúsculas de minúsculas, use -creplace. Para torná-lo explicitamente sem diferenciação de maiúsculas de minúsculas, use -ireplace.

Considere os seguintes exemplos:

PS> "book" -replace "B", "C"
Cook
"book" -ireplace "B", "C"
Cook
"book" -creplace "B", "C"
book

Também é possível usar expressões regulares para substituir dinamicamente o texto usando grupos de captura e substituições. Para obter mais informações, consulte about_Regular_Expressions.

Substituições de ScriptBlock

A partir do PowerShell 6, você pode usar um argumento ScriptBlock para o texto de substituição . O ScriptBlock será executado para cada correspondência encontrada na cadeia de caracteres de entrada .

No ScriptBlock, use a $_ variável automática para se referir ao objeto System.Text.RegularExpressions.Match atual. O objeto Match fornece acesso ao texto de entrada atual que está sendo substituído, bem como outras informações úteis.

Este exemplo substitui cada sequência de três decimais pelo equivalente de caracteres. O ScriptBlock é executado para cada conjunto de três decimais que precisam ser substituídos.

PS> "072101108108111" -replace "\d{3}", {[char][int]$_.Value}
Hello

Comparação de tipos

Os operadores de comparação de tipos (-is e -isnot) são usados para determinar se um objeto é um tipo específico.

-is

Sintaxe:

<object> -is <type reference>

Exemplo:

PS> $a = 1
PS> $b = "1"
PS> $a -is [int]
True
PS> $a -is $b.GetType()
False

-isnot

Sintaxe:

<object> -isnot <type reference>

Exemplo:

PS> $a = 1
PS> $b = "1"
PS> $a -isnot $b.GetType()
True
PS> $b -isnot [int]
True

CONSULTE TAMBÉM