Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
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 de .NET que os implemente, como: Int, String, DateTime, Hashtable e Matrizes.
Operadores bit a bit (, , , , , ) manipulam 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 (, , , , , ) para 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 (, ) usam caracteres curinga como e .
Os operadores de comparação de contenção determinam se um valor de teste aparece em um conjunto de referência (, , , ).
Operadores de comparação de tipos (, ) determinam se um objeto é de um determinado tipo.
Para obter mais informações, consulte about_Comparison_Operators.
Operadores lógicos
Use operadores lógicos (, , , , ) para conectar instruções condicionais a uma única condição complexa. Por exemplo, você pode usar um operador de lógica 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 (, , , e ) para enviar a saída de um comando ou expressão para um arquivo de texto. Os operadores de redirecionamento funcionam como o cmdlet (sem parâmetros), mas também permitem redirecionar a saída de erro para arquivos especificados. Você também pode usar o cmdlet para redirecionar a saída.
Para obter mais informações, consulte about_Redirection
Dividir e unir operadores
Os operadores e dividem e combinam subcadeias de caracteres. O operador divide uma cadeia de caracteres em subcadeias de caracteres. O 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 de .NET de um objeto.
Para obter mais informações, consulte about_Type_Operators.
Operadores unários
Use os operadores unários e para incrementar ou decrementar valores e para negação. Por exemplo, para incrementar a variável de para , digite .
Para obter mais informações, consulte about_Arithmetic_Operators.
Operadores especiais
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:
No entanto, no PowerShell, há comportamentos adicionais.
Agrupando expressões de resultado
permite que a saída de um comando participe de uma expressão. Por exemplo:
PS> (Get-Item *.txt).Count -gt 10
True
Expressões agrupadas de tubulação
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 encapsulam um comando, ele é executado até a conclusão com toda a saída coletada na memória antes que os resultados sejam enviados pelo pipeline.
Agrupar uma expressão antes da tubulação também garante que o processamento objeto por objeto subsequente não possa interferir na enumeração que o comando usa para produzir sua saída.
Instruções de atribuição de agrupamento
Instruções de atribuição desagrupadas não geram valores. Ao agrupar uma instrução de atribuição, o valor da variável atribuída é passado e pode ser usado em expressões maiores. Por exemplo:
PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True
Encapsular a instrução entre parênteses a transforma em uma expressão que gera o valor de .
Esse comportamento se aplica a todos os operadores de atribuição, incluindo operadores compostos como e os operadores increment () e decremento (). No entanto, a ordem da operação para incremento e decremento depende de sua posição.
PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1
No caso do prefixo, o valor de é incrementado antes de ser saída. No caso de postfixo, o valor de é incrementado após a saída.
Você também pode usar essa técnica no contexto de uma instrução condicional, como a instrução.
if ($textFiles = Get-ChildItem *.txt) {
$textFiles.Count
}
Neste exemplo, se nenhum arquivo corresponder, o comando não retornará nada e não atribuirá nada a , o que é considerado em um contexto booliano. Se um ou mais objetos FileInfo forem atribuídos , a condicional será avaliada como . Você pode trabalhar com o valor de no corpo da instrução .
Note
Embora essa técnica seja conveniente e concisa, ela pode causar confusão entre o operador de atribuição () e o operador de comparação de igualdade ().
Operador de subexpressão
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. O resultado é sempre uma matriz de 0 ou mais objetos.
PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -EQ Starting )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
0
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 scriptblock. 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 scriptblocks. O operador de chamada é executado em um escopo filho. Para obter mais informações sobre escopos, consulte about_Scopes. Você pode usá-lo para criar cadeias de caracteres que contêm o comando, os parâmetros e os argumentos necessários e, em seguida, invocar a cadeia de caracteres como se fosse um comando. As cadeias de caracteres criadas devem seguir as mesmas regras de análise que um comando que você digita na linha de comando. Para obter mais informações, consulte about_Parsing.
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.
O cmdlet Invoke-Expression pode executar um 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 a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
PS> Invoke-Expression "1+1"
2
Você pode executar um script usando seu nome de arquivo. Um arquivo de script deve ter uma extensão de arquivo para ser executável. Os arquivos que têm espaços em seu caminho devem ser colocados entre aspas. Se você tentar executar o caminho entre aspas, o PowerShell exibirá o conteúdo da cadeia de caracteres entre aspas em vez de executar o script. O operador de chamada permite executar 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 scriptblocks, consulte about_Script_Blocks.
Operador de plano de fundo
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 . Por padrão, o operador em segundo plano inicia os trabalhos no diretório de trabalho atual do chamador que iniciou as tarefas paralelas. 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 -ScriptBlock {Get-Process -Name pwsh}
Assim como , o operador em segundo plano retorna um objeto . Esse objeto pode ser usado com e , como se você tivesse usado 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 de plano de fundo também é um terminador de instrução, assim como o e comercial do operador de controle Unix (). Isso permite que você invoque comandos adicionais após a operador em segundo plano. O exemplo a seguir demonstra a invocação de comandos adicionais após o operador de plano de fundo .
$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 todos 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 no tipo especificado. Se os objetos não puderem ser convertidos, o PowerShell gerará um erro.
[datetime] '2/20/88' - [datetime] '1/20/88' -eq [timespan] '31'
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 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 tornam-se variáveis. Parâmetros para os quais nenhum valor foi fornecido se tornam variáveis sem valor. No entanto, a variável automática é preservada.
. C:\scripts\sample.ps1 1 2 -Also:3
Note
O operador dot sourcing é seguido por um espaço. Use o espaço para distinguir o ponto do símbolo do 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 de formato
Forneça acesso ao recurso de formatação composta .NET. Uma cadeia de caracteres de formato composto consiste em texto fixo intermixado com espaços reservados indexados, chamados de itens de formato. Esses itens de formato correspondem aos objetos na lista.
Cada item de formato usa o seguinte formulário e consiste nos seguintes componentes:
{index[,alignment][:formatString]}
As chaves correspondentes ( e ) são necessárias.
A operação de formatação produz uma cadeia de caracteres de resultado que consiste no texto fixo original intermixado com a representação de cadeia de caracteres dos objetos na lista. Para obter mais informações, consulte Formatação composta.
Insira a cadeia de caracteres de formato composto 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
Você pode preencher um valor numérico com o especificador personalizado "0". O número de zeros após o indica a largura máxima para a qual a cadeia de caracteres formatada será fixada.
"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365
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}
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 . Você também pode usar índices negativos para obter os últimos valores. As tabelas de hash são indexadas por valor de chave.
Dada uma lista de índices, o operador de índice retorna uma lista de membros correspondentes a esses índices.
PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(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...
Quando um objeto não é uma coleção indexada, usar o operador de índice para acessar o primeiro elemento retorna o objeto em si. Valores de índice além do retorno do primeiro elemento .
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
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'}
Operadores de cadeia de pipeline e
Execute condicionalmente o pipeline do lado direito com base no sucesso do pipeline do lado esquerdo.
# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules
Para obter mais informações, consulte About_Pipeline_Chain_Operators.
Operador de intervalo
O operador de intervalo pode ser usado para representar uma matriz de inteiros sequenciais ou caracteres. Os valores unidos pelo operador de intervalo definem os valores inicial e final do intervalo.
Note
O suporte para intervalos de caracteres foi adicionado no PowerShell 6.
Intervalos de números
1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}
Você também pode criar intervalos em ordem inversa.
10..1
5..-5 | ForEach-Object {Write-Output $_}
Os valores inicial e final do intervalo podem ser qualquer par de expressões que sejam avaliadas como um inteiro ou um caractere. Os pontos de extremidade do intervalo devem ser conversíveis para inteiros de 32 bits assinados (). Valores maiores causam um erro. Além disso, se o intervalo for capturado em uma matriz, o tamanho da matriz resultante será limitado a . Esse é o tamanho máximo de uma matriz em .NET.
Por exemplo, você pode usar os membros de uma enumeração para os valores inicial e final.
PS> enum Food {
Apple
Banana = 3
Kiwi = 10
}
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10
Important
O intervalo resultante não se limita aos valores da enumeração. Em vez disso, representa o intervalo de valores entre os dois valores fornecidos. Você não pode usar o operador de intervalo para representar de forma confiável os membros de uma enumeração.
Intervalos de caracteres
Para criar um intervalo de caracteres, coloque os caracteres entre aspas.
PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A
Se você atribuir um intervalo de caracteres a uma cadeia de caracteres, ele será tratado como a mesma atribuição de uma matriz de caracteres a uma cadeia de caracteres.
PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e
Os caracteres na matriz são unidos em uma cadeia de caracteres. Os caracteres são separados pelo valor da variável de preferência . Para obter mais informações, consulte sobre_Variáveis_de_Preferência.
A ordem dos caracteres na matriz é determinada pelo valor ASCII do caractere. Por exemplo, os valores ASCII de e são 99 e 88, respectivamente. Esse intervalo seria apresentado em ordem inversa.
PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X
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. $_ }
Iniciando o PowerShell 3.0, quando você usa o operador em um objeto de coleção de listas que não tem o membro, o PowerShell enumera automaticamente os itens nessa coleção e usa o operador em cada um deles. Para obter mais informações, consulte about_Member-Access_Enumeration.
Quando você usa o operador de acesso de membro para ler uma propriedade que não existe ou quando um método getter de propriedade lança uma exceção, o PowerShell retorna em vez de gerar um erro. Esse comportamento é específico para o acesso à propriedade. Esse comportamento segue .NET regra de AC CA1065 que indica:
As propriedades são basicamente campos inteligentes. Portanto, elas devem se comportar como um campo tanto quanto possível. Os campos não geram exceções e nem as propriedades deveriam. Se você tiver uma propriedade que gera uma exceção, considere torná-la um método.
As exceções geradas por invocações de método (incluindo chamar o método subjacente diretamente) não são suprimidas.
Operador membro estático
Chama as propriedades estáticas e os métodos de uma classe .NET. Para localizar as propriedades estáticas e os métodos de um objeto, use o parâmetro estático do cmdlet . O nome do membro pode ser uma expressão.
[datetime]::Now
'MinValue', 'MaxValue' | ForEach-Object { [int]:: $_ }
Operador ternário
Você pode usar o operador ternário como uma substituição para a instrução em casos condicionais simples.
Para obter mais informações, consulte about_If.
Operador de coalescagem nula
O operador de agrupamento nulo retornará o valor de seu operando à esquerda se não for nulo. Caso contrário, ele avalia o operando à direita e retorna seu resultado. O operador não avaliará seu operando à direita se o operando esquerdo for avaliado como não nulo.
$x = $null
$x ?? 100
100
No exemplo a seguir, o operando à direita não será avaliado.
[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020
Operador de atribuição de coalescagem nula
O operador de atribuição de agrupamento nulo atribui o valor de seu operando à direita ao seu operando à esquerda somente se o operando esquerdo for avaliado como nulo. O operador não avaliará seu operando à direita se o operando esquerdo for avaliado como não nulo.
$x = $null
$x ??= 100
$x
100
No exemplo a seguir, o operando à direita não será avaliado.
[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
$todaysDate
1/10/2020
Operadores condicionais nulos e
Note
Esse recurso foi movido do experimental para o mainstream no PowerShell 7.1.
Um operador condicional nulo aplica um acesso de membro, , ou acesso de elemento, , operação ao seu operando somente se esse operando for avaliado como não nulo; caso contrário, ele retornará nulo.
Como o PowerShell permite que faça parte do nome da variável, a especificação formal do nome da variável é necessária para usar esses operadores. Você deve usar chaves () em torno dos nomes de variáveis como ou quando faz parte do nome da variável .
Note
A sintaxe do nome da variável de não deve ser confundida com o operador de subexpressão . Para obter mais informações, consulte a seção Nome da variável de about_Variables.
No exemplo a seguir, o valor de PropName é retornado.
$a = @{ PropName = 100 }
${a}?.PropName
100
O exemplo a seguir retorna nulo sem tentar acessar o nome do membro PropName.
$a = $null
${a}?.PropName
Neste exemplo, o valor do elemento indexado é retornado.
$a = 1..10
${a}?[0]
1
O exemplo a seguir retorna nulo sem tentar acessar o elemento indexado.
$a = $null
${a}?[0]
Consulte também
- about_Arithmetic_Operators
- about_Assignment_Operators
- about_Comparison_Operators
- about_Logical_Operators
- about_Operator_Precedence
- about_Member-Access_Enumeration
- about_Type_Operators
- about_Split
- about_Join
- about_Redirection