Compartilhar via


Sobre operadores

Descrição breve

Descreve os operadores compatíveis com o PowerShell.

Descrição longa

Um operador é um elemento de linguagem que você pode usar em um comando ou expressão. O PowerShell dá suporte a vários tipos de operadores para ajudá-lo a manipular valores.

Operadores aritméticos

Use operadores aritméticos (+, -, *, /, ) %para calcular valores em um comando ou expressão. Com esses operadores, você pode adicionar, subtrair, multiplicar ou dividir valores e calcular o restante (módulo) de uma operação de divisão.

O operador de adição concatena elementos. O operador de multiplicação retorna o número especificado de cópias de cada elemento. Você pode usar operadores aritméticos em qualquer tipo .NET que os implemente, como: Int, String, DateTime, Hashtablee Matrizes.

Operadores bit a bit (-band, -bor, -bxor, -bnot, -shl, ) -shrmanipulam os padrões de bit em valores.

Para obter mais informações, consulte about_Arithmetic_Operators.

Operadores de atribuição

Use operadores de atribuição (=, +=, -=, *=, /=, ) %=para atribuir, alterar ou acrescentar valores a variáveis. Você pode combinar operadores aritméticos com atribuição para atribuir o resultado da operação aritmética a uma variável.

Para obter mais informações, consulte about_Assignment_Operators.

Operadores de comparação

Use operadores de comparação (-eq, -ne, -gt, -lt, -le, ) -gepara comparar valores e condições de teste. Por exemplo, você pode comparar dois valores de cadeia de caracteres para determinar se eles são iguais.

Os operadores de comparação também incluem operadores que encontram ou substituem padrões no texto. Os operadores (, , ) usam expressões regulares e (-like, -notlike) usam curingas *. -replace-notmatch-match

Os operadores de comparação de contenção determinam se um valor de teste aparece em um conjunto de referência (-in, -notin, -contains, -notcontains).

Operadores de comparação de tipos (-is, -isnot) determinam se um objeto é de um determinado tipo.

Para obter mais informações, consulte about_Comparison_Operators.

Operadores lógicos

Use operadores lógicos (-and, -or, -xor, -not, !) para conectar instruções condicionais a uma única condicional complexa. Por exemplo, você pode usar um operador lógico -and para criar um filtro de objeto com duas condições diferentes.

Para obter mais informações, consulte about_Logical_Operators.

Operadores de redirecionamento

Use operadores de redirecionamento (>, >>, 2>, 2>>e 2>&1) para enviar a saída de um comando ou expressão para um arquivo de texto. Os operadores de redirecionamento funcionam como o Out-File cmdlet (sem parâmetros), mas também permitem redirecionar a saída de erro para arquivos especificados. Você também pode usar o Tee-Object cmdlet para redirecionar a saída.

Para obter mais informações, consulte about_Redirection

Operadores De divisão e junção

Os -split operadores e -join dividem e combinam subcadeias de caracteres. O -split operador divide uma cadeia de caracteres em subcadeias de caracteres. O -join operador concatena várias cadeias de caracteres em uma única cadeia de caracteres.

Para obter mais informações, consulte about_Split e about_Join.

Operadores de tipo

Use os operadores de tipo (-is, -isnot, -as) para localizar ou alterar o tipo .NET Framework de um objeto.

Para obter mais informações, consulte about_Type_Operators.

Operadores unários

Use operadores unários para incrementar ou decrementar variáveis ou propriedades de objeto e para definir inteiros como números positivos ou negativos. Por exemplo, para incrementar a variável $a de 9 para 10, digite $a++.

Operadores especiais

Os operadores especiais têm casos de uso específicos que não se encaixam em nenhum outro grupo de operadores. Por exemplo, operadores especiais permitem que você execute comandos, altere o tipo de dados de um valor ou recupere elementos de uma matriz.

Operador de agrupamento ( )

Como em outras linguagens, (...) serve para substituir a precedência do operador em expressões. Por exemplo: (1 + 2) / 3

No entanto, no PowerShell, há comportamentos adicionais.

  • (...) permite que você permita que a saída de um comando participe de uma expressão. Por exemplo:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Quando usado como o primeiro segmento de um pipeline, encapsular um comando ou expressão entre parênteses invariavelmente causa enumeração do resultado da expressão. Se os parênteses encapsularem um comando, ele será executado até a conclusão com toda a saída coletada na memória antes que os resultados sejam enviados pelo pipeline.

Observação

Encapsular um comando entre parênteses faz com que a variável $? automática seja definida $truecomo , mesmo quando o próprio comando delimitado é definido $?$falsecomo . Por exemplo, (Get-Item /Nosuch); $? gera inesperadamente True. Para obter mais informações sobre $?, consulte about_Automatic_Variables.

Operador subexpression $( )

Retorna o resultado de uma ou mais instruções. Para um único resultado, retorna um escalar. Para vários resultados, retorna uma matriz. Use isso quando quiser usar uma expressão em outra expressão. Por exemplo, para inserir os resultados do comando em uma expressão de cadeia de caracteres.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Operador de subexpressão de matriz @( )

Retorna o resultado de uma ou mais instruções como uma matriz. Se houver apenas um item, a matriz terá apenas um membro.

@(Get-CimInstance win32_logicalDisk)

Sintaxe literal da tabela de hash @{}

Semelhante à subexpressão da matriz, essa sintaxe é usada para declarar uma tabela de hash. Para obter mais informações, consulte about_Hash_Tables.

Operador de chamada &

Executa um comando, script ou bloco de script. O operador de chamada, também conhecido como "operador de invocação", permite executar comandos armazenados em variáveis e representados por cadeias de caracteres ou blocos de script. O operador de chamada é executado em um escopo filho. Para obter mais informações sobre escopos, consulte about_Scopes.

Este exemplo armazena um comando em uma cadeia de caracteres e o executa usando o operador de chamada.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

O operador de chamada não analisa cadeias de caracteres. Isso significa que você não pode usar parâmetros de comando em uma cadeia de caracteres ao usar o operador de chamada.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

O cmdlet Invoke-Expression pode executar o código que causa erros de análise ao usar o operador de chamada.

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Você pode usar o operador de chamada para executar scripts usando seus nomes de arquivo. O exemplo a seguir mostra um nome de arquivo de script que contém espaços. Quando você tenta executar o script, o PowerShell exibe o conteúdo da cadeia de caracteres entre aspas que contém o nome do arquivo. O operador de chamada permite que você execute o conteúdo da cadeia de caracteres que contém o nome do arquivo.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Para obter mais informações sobre blocos de script, consulte about_Script_Blocks.

Operador em segundo plano &

Executa o pipeline antes dele em segundo plano, em um trabalho do PowerShell. Esse operador atua de forma semelhante ao e comercial do operador de controle UNIX (&), que executa o comando antes dele de forma assíncrona em subshell como um trabalho.

Esse operador é funcionalmente equivalente a Start-Job. O exemplo a seguir demonstra o uso básico do operador de trabalho em segundo plano.

Get-Process -Name pwsh &

Esse comando é funcionalmente equivalente ao seguinte uso de Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Assim como Start-Job, o operador em & segundo plano retorna um Job objeto . Esse objeto pode ser usado com Receive-Job e Remove-Job, como se você tivesse usado Start-Job para iniciar o trabalho.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

O & operador em segundo plano também é um terminador de instrução, assim como o e comercial do operador de controle UNIX (&). Isso permite invocar comandos adicionais após o & operador em segundo plano. O exemplo a seguir demonstra a invocação de comandos adicionais após o & operador em segundo plano.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Isso é equivalente ao seguinte script:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Se você quiser executar vários comandos, cada um em seu próprio processo em segundo plano, mas tudo em uma linha, basta colocar & entre e depois de cada um dos comandos.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

Para obter mais informações sobre trabalhos do PowerShell, consulte about_Jobs.

Operador cast [ ]

Converte ou limita objetos ao tipo especificado. Se os objetos não puderem ser convertidos, o PowerShell gerará um erro.

[DateTime]"2/20/88" - [DateTime]"1/20/88"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

Uma conversão também pode ser executada quando uma variável é atribuída ao uso de notação de conversão.

Operador de vírgula ,

Como um operador binário, a vírgula cria uma matriz ou acrescenta à matriz que está sendo criada. No modo de expressão, como um operador unário, a vírgula cria uma matriz com apenas um membro. Coloque a vírgula antes do membro.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Como Write-Object espera um argumento, você deve colocar a expressão entre parênteses.

Operador dot sourcing .

Executa um script no escopo atual para que quaisquer funções, aliases e variáveis que o script cria sejam adicionadas ao escopo atual, substituindo as existentes. Parâmetros declarados pelo script se tornam variáveis. Parâmetros para os quais nenhum valor foi dado se tornam variáveis sem valor. No entanto, a variável $args automática é preservada.

. c:\scripts\sample.ps1 1 2 -Also:3

Observação

O operador dot sourcing é seguido por um espaço. Use o espaço para distinguir o ponto do símbolo de ponto (.) que representa o diretório atual.

No exemplo a seguir, o script Sample.ps1 no diretório atual é executado no escopo atual.

. .\sample.ps1

Operador format -f

Formata cadeias de caracteres usando o método de formato de objetos de cadeia de caracteres. Insira a cadeia de caracteres de formato no lado esquerdo do operador e os objetos a serem formatados no lado direito do operador.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

Se você precisar manter as chaves ({}) na cadeia de caracteres formatada, poderá escapar delas dobrando as chaves.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Para obter mais informações, consulte o método String.Format e Formatação composta.

Operador de índice [ ]

Seleciona objetos de coleções indexadas, como matrizes e tabelas de hash. Os índices de matriz são baseados em zero, portanto, o primeiro objeto é indexado como [0]. Para matrizes (somente), você também pode usar índices negativos para obter os últimos valores. As tabelas de hash são indexadas por valor de chave.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Operador de pipeline |

Envia ("pipes") a saída do comando que o precede ao comando que o segue. Quando a saída inclui mais de um objeto (uma "coleção"), o operador de pipeline envia os objetos um de cada vez.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Operador de intervalo ..

Representa os inteiros sequenciais em uma matriz de inteiros, considerando um limite superior e inferior.

1..10
foreach ($a in 1..$max) {Write-Host $a}

Você também pode criar intervalos na ordem inversa.

10..1
5..-5 | ForEach-Object {Write-Output $_}

A partir do PowerShell 6, o operador de intervalo funciona com Caracteres , bem como Inteiros.

Para criar um intervalo de caracteres, coloque os caracteres de limite entre aspas.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Operador de acesso de membro .

Acessa as propriedades e os métodos de um objeto . O nome do membro pode ser uma expressão.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

Operador membro estático ::

Chama as propriedades estáticas e os métodos de uma classe .NET Framework. Para localizar as propriedades estáticas e os métodos de um objeto , use o parâmetro Static do Get-Member cmdlet . O nome do membro pode ser uma expressão.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Confira também

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection