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 como usar operadores para atribuir valores a variáveis.
Descrição longa
Os operadores de atribuição atribuem um ou mais valores a uma variável. O sinal de igual (=) é o operador de atribuição do PowerShell. O PowerShell também tem os seguintes operadores de atribuição de compound: +=, -=, *=, %=, ++, --, ??=.
Os operadores de atribuição composta executam operações nos valores antes da atribuição.
Sintaxe
A sintaxe dos operadores de atribuição é a seguinte:
-
<assignable-expression><assignment-operator><value>
Expressões atribuíveis incluem variáveis e propriedades. O valor pode ser um único valor, uma matriz de valores ou um comando, uma expressão ou uma instrução.
Os operadores de incremento e decremento são operadores unários. Cada um tem versões de prefixo e sufixo.
<assignable-expression><operator><operator><assignable-expression>
O valor da expressão atribuível deve ser um número ou deve ser conversível para um número.
Usando o operador de atribuição
As variáveis são espaços de memória nomeados que armazenam valores. Você armazena os valores em variáveis usando o operador de atribuição =. O novo valor pode substituir o valor existente da variável ou você pode acrescentar um novo valor ao valor existente. Por exemplo, a instrução a seguir atribui o valor PowerShell à variável $MyShell:
$MyShell = "PowerShell"
Quando você atribui um valor a uma variável no PowerShell, a variável será criada se ela ainda não existir. Por exemplo, a primeira das duas instruções de atribuição a seguir cria a variável $a e atribui um valor de 6 a $a. A segunda instrução de atribuição atribui um valor de 12 a $a. A primeira instrução cria uma nova variável. A segunda declaração altera somente o seu valor.
$a = 6
$a = 12
As variáveis no PowerShell não têm um tipo de dados específico, a menos que você as converta. Quando uma variável contém apenas um objeto, a variável usa o tipo de dados desse objeto. Quando uma variável contém uma coleção de objetos, a variável tem o tipo de dados System.Object. Portanto, você pode atribuir qualquer tipo de objeto à coleção. O exemplo a seguir mostra que você pode adicionar objetos de processo, objetos de serviço, cadeias de caracteres e inteiros a uma variável sem gerar um erro:
$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12
Como o operador de atribuição = tem uma precedência menor do que o operador de pipeline |, parênteses não são necessários para atribuir o resultado de um pipeline de comando a uma variável. Por exemplo, o comando a seguir classifica os serviços no computador e atribui os serviços classificados à variável $a:
$a = Get-Service | Sort-Object -Property Name
Você também pode atribuir o valor criado por uma instrução a uma variável, como no exemplo a seguir:
$a = if ($b -lt 0) { 0 } else { $b }
Este exemplo atribui zero à variável $a se o valor de $b for menor que zero. Ele atribui o valor de $b a $a se o valor de $b não for menor que zero.
Para atribuir uma matriz (vários valores) a uma variável, separe os valores com vírgulas da seguinte maneira:
$a = "apple", "orange", "lemon", "grape"
Para atribuir uma tabela de hash a uma variável, use a notação de tabela hash padrão no PowerShell. Digite um sinal de arroba @ seguido por pares chave/valor separados por ponto e vírgula ; e encapsulado entre chaves { }. Por exemplo, para atribuir um hashtable à variável $a, digite:
$a = @{one=1; two=2; three=3}
Para atribuir valores hexadecimal a uma variável, preceda o valor com 0x.
O PowerShell converte o valor hexadecimal (0x10) em um valor decimal (neste caso, 16) e atribui esse valor à variável $a. Por exemplo, para atribuir um valor de 0x10 à variável $a, digite:
$a = 0x10
Para atribuir um valor exponencial a uma variável, digite o número raiz, a letra ee um número que representa um múltiplo de 10. Por exemplo, para atribuir um valor de 3,1415 à potência de 1.000 à variável $a, digite:
$a = 3.1415e3
O PowerShell também pode converter quilobytes KB, megabytes MBe gigabytes GB em bytes. Por exemplo, para atribuir um valor de 10 quilobytes à variável $a, digite:
$a = 10kb
Usando operadores de atribuição composta
Os operadores de atribuição composta executam operações numéricas nos valores antes da atribuição.
Importante
Os operadores de atribuição composta não usam escopo dinâmico. A variável está sempre no escopo atual.
No exemplo a seguir, a variável $x é definida no escopo global. As chaves criam um novo escopo. A variável $x dentro das chaves é uma nova instância e não uma cópia da variável global.
$x = 1 # Global scope
& { $x += 1; $x }
1
Ao usar o operador de atribuição regular, você obtém uma cópia da variável do escopo pai. Mas observe que $x no escopo pai não foi alterado.
$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1
A atribuição por operador de adição
A atribuição por operador de adição += incrementa o valor de uma variável ou acrescenta o valor especificado ao valor existente. A ação depende se a variável tem um tipo numérico ou de cadeia de caracteres e se a variável contém um único valor (um escalar) ou vários valores (uma coleção).
O operador += combina duas operações. Primeiro, ele adiciona e, em seguida, atribui.
Portanto, as seguintes afirmações são equivalentes:
$a += 2
$a = ($a + 2)
Quando a variável contém um único valor numérico, o operador += incrementa o valor existente pela quantidade no lado direito do operador. Em seguida, o operador atribui o valor resultante à variável. O exemplo a seguir mostra como usar o operador += para aumentar o valor de uma variável:
$a = 4
$a += 2
$a
6
Quando o valor da variável é uma cadeia de caracteres, o valor no lado direito do operador é acrescentado à cadeia de caracteres, da seguinte maneira:
$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell
Quando o valor da variável é uma matriz, o operador += acrescenta os valores no lado direito do operador à matriz. A menos que a matriz seja explicitamente tipada pelo lançamento, você pode acrescentar qualquer tipo de valor à matriz, da seguinte maneira:
$a = 1,2,3
$a += 2
$a
1
2
3
2
e
$a += "String"
$a
1
2
3
2
String
Quando o valor de uma variável é uma tabela de hash, o operador += acrescenta o valor no lado direito do operador à tabela de hash. No entanto, como o único tipo que você pode adicionar a uma tabela de hash é outra tabela de hash, todas as outras atribuições falham.
Por exemplo, o comando a seguir atribui uma tabela de hash à variável $a.
Em seguida, ele usa o operador += para acrescentar outra tabela de hash à tabela de hash existente, adicionando efetivamente um novo par chave-valor à tabela de hash existente.
Esse comando é bem-sucedido, conforme mostrado na saída:
$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name Value
---- -----
a 1
b 2
mode write
c 3
O comando a seguir tenta acrescentar um inteiro "1" à tabela de hash na variável $a. Esse comando falha:
$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
2 | $a += 1
| ~~~~~~~
| A hash table can only be added to another hash table.
A atribuição por operador de subtração
A atribuição por operador de subtração -= decrementa o valor de uma variável pelo valor especificado no lado direito do operador. Esse operador não pode ser usado com variáveis de cadeia de caracteres e não pode ser usado para remover um elemento de uma coleção.
O operador -= combina duas operações. Primeiro, ele subtrai e depois atribui. Portanto, as seguintes afirmações são equivalentes:
$a -= 2
$a = ($a - 2)
O exemplo a seguir mostra como usar o operador -= para diminuir o valor de uma variável:
$a = 8
$a -= 2
$a
6
Você também pode usar o operador de atribuição -= para diminuir o valor de um membro de uma matriz numérica. Para fazer isso, especifique o índice do elemento de matriz que você deseja alterar. No exemplo a seguir, o valor do terceiro elemento de uma matriz (elemento 2) é reduzido em 1:
$a = 1,2,3
$a[2] -= 1
$a
1
2
2
Você não pode usar o operador -= para excluir os valores de uma variável. Para excluir todos os valores atribuídos a uma variável, use os cmdlets
$a = $null
Para excluir um valor específico de uma matriz, use a notação de matriz para atribuir um valor de $null ao item específico. Por exemplo, a instrução a seguir exclui o segundo valor (posição de índice 1) de uma matriz:
$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3
Para excluir uma variável, use o cmdlet $a:
Remove-Variable -Name a
A atribuição por operador de multiplicação
A atribuição por operador de multiplicação *= multiplica um valor numérico ou acrescenta o número especificado de cópias do valor da cadeia de caracteres de uma variável.
Quando uma variável contém um único valor numérico, esse valor é multiplicado pelo valor no lado direito do operador. Por exemplo, o exemplo a seguir mostra como usar o operador *= para multiplicar o valor de uma variável:
$a = 3
$a *= 4
$a
12
Nesse caso, o operador *= combina duas operações. Primeiro, ele multiplica e então atribui. Portanto, as seguintes afirmações são equivalentes:
$a *= 2
$a = ($a * 2)
Quando uma variável contém um valor de cadeia de caracteres, o PowerShell acrescenta o número especificado de cadeias de caracteres ao valor, da seguinte maneira:
$a = "file"
$a *= 4
$a
filefilefilefile
Para multiplicar um elemento de uma matriz, use um índice para identificar o elemento que você deseja multiplicar. Por exemplo, o comando a seguir multiplica o primeiro elemento na matriz (posição de índice 0) por 2:
$a[0] *= 2
A atribuição por operador de divisão
A atribuição por operador de divisão /= divide um valor numérico pelo valor especificado no lado direito do operador. O operador não pode ser usado com variáveis de cadeia de caracteres.
O operador /= combina duas operações. Primeiro, ele divide e então atribui. Portanto, as duas afirmações a seguir são equivalentes.
$a /= 2
$a = ($a / 2)
Por exemplo, o seguinte comando usa o operador /= para dividir o valor de uma variável:
$a = 8
$a /=2
$a
4
Para dividir um elemento de uma matriz, use um índice para identificar o elemento que você deseja alterar. Por exemplo, o comando a seguir divide o segundo elemento na matriz (posição de índice 1) por 2:
$a[1] /= 2
A atribuição por operador de módulo
A atribuição por operador de módulo %= divide o valor de uma variável pelo valor no lado direito do operador. Em seguida, o operador %= atribui o restante (conhecido como módulo) à variável. Você só pode usar esse operador quando uma variável contiver um único valor numérico. Você não pode usar esse operador quando uma variável contém uma variável de cadeia de caracteres ou uma matriz.
O operador %= combina duas operações. Primeiro, ele divide e determina o restante e, em seguida, atribui o restante à variável. Portanto, as seguintes afirmações são equivalentes:
$a %= 2
$a = ($a % 2)
O exemplo a seguir mostra como usar o operador %= para salvar o módulo de um quociente:
$a = 7
$a %= 4
$a
3
Os operadores de incremento e de decremento
O operador de incremento ++ aumenta o valor de uma variável em 1. Quando você usa o operador de incremento em uma instrução simples, nenhum valor é retornado. Para exibir o resultado, exiba o valor da variável, da seguinte maneira:
$a = 7
++$a
$a
8
Para forçar um valor a ser retornado, coloque a variável e o operador entre parênteses, da seguinte maneira:
$a = 7
(++$a)
8
O operador de incremento pode ser colocado antes (prefixo) ou depois (postfix) de uma variável. A versão de prefixo do operador incrementa uma variável antes que seu valor seja usado na instrução, da seguinte maneira:
$a = 7
$c = ++$a
$a
8
$c
8
A versão de postfixo do operador incrementa uma variável depois que seu valor é usado na expressão. No exemplo a seguir, as variáveis $c e $a têm valores diferentes porque o valor é atribuído a $c antes de $a mudar.
$a = 7
$c = $a++
$a
8
$c
7
O operador decremento -- diminui o valor de uma variável em 1. Assim como acontece com o operador de incremento, nenhum valor é retornado quando você usa o operador em uma instrução simples. Use parênteses para retornar um valor, da seguinte maneira:
$a = 7
--$a
$a
6
(--$a)
5
A versão de prefixo do operador decrementa uma variável antes que seu valor seja usado na instrução, da seguinte maneira:
$a = 7
$c = --$a
$a
6
$c
6
A versão de postfixo do operador decrementa uma variável depois que seu valor é usado na expressão. No exemplo a seguir, as variáveis $d e $a têm valores diferentes porque o valor é atribuído a $d antes de $a mudar.
$a = 7
$d = $a--
$a
6
$d
7
Operador de atribuição de avaliação de nulo
O operador de atribuição de avaliação de nulo ??= atribuirá o valor do operando do lado direito para o operando esquerdo somente se o operando esquerdo for avaliado como nulo. O operador ??= não avaliará o operando do lado direito se o operando esquerdo for avaliado como não nulo.
$x = $null
$x ??= 100
$x
100
Para obter mais informações, consulte Operador de coalescagem nula.
Tipos do Microsoft .NET
Por padrão, quando uma variável tem apenas um valor, o valor atribuído à variável determina o tipo de dados da variável. Por exemplo, o comando a seguir cria uma variável que tem o tipo System.Int32:
$a = 6
Para localizar o tipo .NET de uma variável, use o método GetType e sua propriedade FullName. Certifique-se de incluir os parênteses após o nome do método GetType, embora a chamada de método não tenha argumentos:
$a = 6
$a.GetType().FullName
System.Int32
Para criar uma variável que contenha uma cadeia de caracteres, atribua um valor de cadeia de caracteres à variável. Para indicar que o valor é uma cadeia de caracteres, coloque-o entre aspas, da seguinte maneira:
$a = "6"
$a.GetType().FullName
System.String
Se o primeiro valor atribuído à variável for uma cadeia de caracteres, o PowerShell tratará todas as operações como operações de cadeia de caracteres e converterá novos valores em cadeias de caracteres. Isso ocorre no exemplo a seguir:
$a = "file"
$a += 3
$a
file3
Se o primeiro valor for um inteiro, o PowerShell tratará todas as operações como operações de inteiro e converterá novos valores em inteiros. Isso ocorre no exemplo a seguir:
$a = 6
$a += "3"
$a
9
Você pode declarar uma nova variável escalar
Por exemplo, o comando a seguir converte a variável como um tipo de cadeia de caracteres:
[string]$a = 27
$a += 3
$a
273
O exemplo a seguir converte o primeiro valor, em vez de converter a variável:
$a = [string]27
Você não poderá reformular o tipo de dados de uma variável existente se seu valor não puder ser convertido no novo tipo de dados.
$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."
Para alterar o tipo de dados, você deve substituir seu valor, da seguinte maneira:
[int]$a = 3
Além disso, quando você precede um nome de variável com um tipo de dados, o tipo dessa variável é bloqueado, a menos que você substitua explicitamente o tipo especificando outro tipo de dados. Se você tentar atribuir um valor incompatível com o tipo existente e não substituir explicitamente o tipo, o PowerShell exibirá um erro, conforme mostrado no exemplo a seguir:
$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
2 | $a = "string"
| ~~~~~~~~~~~~~
| Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"
No PowerShell, os tipos de dados de variáveis que contêm vários itens em uma matriz são tratados de forma diferente dos tipos de dados de variáveis que contêm um único item. A menos que um tipo de dados seja atribuído especificamente a uma variável de matriz, o tipo de dados é sempre System.Object []. Esse tipo de dados é específico para matrizes.
Às vezes, você pode substituir o tipo padrão especificando outro tipo. Por exemplo, o comando a seguir converte a variável como um tipo de matriz string []:
[string []] $a = "one", "two", "three"
As variáveis do PowerShell podem ser qualquer tipo de dados .NET. Além disso, você pode atribuir qualquer tipo de dados .NET totalmente qualificado disponível no processo atual. Por exemplo, o seguinte comando especifica um tipo de dados System.DateTime:
[System.DateTime]$a = "5/31/2005"
A variável receberá um valor que esteja em conformidade com o tipo de dados System.DateTime. O valor da variável $a seria o seguinte:
Tuesday, May 31, 2005 12:00:00 AM
Atribuindo várias variáveis
No PowerShell, você pode atribuir valores a várias variáveis usando um único comando. O primeiro elemento do valor da atribuição é atribuído à primeira variável, o segundo elemento é atribuído à segunda variável, o terceiro elemento à terceira variável. Isso é conhecido como atribuição múltipla.
Por exemplo, o comando a seguir atribui o valor 1 à variável $a, o valor 2 à variável $b e o valor 3 à variável $c:
$a, $b, $c = 1, 2, 3
Se o valor da atribuição contiver mais elementos do que variáveis, todos os valores restantes serão atribuídos à última variável. Por exemplo, o comando a seguir contém três variáveis e cinco valores:
$a, $b, $c = 1, 2, 3, 4, 5
Portanto, o PowerShell atribui o valor 1 à variável $a e o valor 2 à variável $b. Ele atribui os valores 3, 4 e 5 à variável $c.
Para atribuir os valores na variável $c a três outras variáveis, use o seguinte formato:
$d, $e, $f = $c
Esse comando atribui o valor 3 à variável $d, o valor 4 à variável $e e o valor 5 à variável $f.
Se o valor da atribuição contiver menos elementos do que variáveis, as variáveis restantes receberão o valor $null. Por exemplo, o comando a seguir contém três variáveis e dois valores:
$a, $b, $c = 1, 2
Portanto, o PowerShell atribui o valor 1 à variável $a e o valor 2 à variável $b. A variável $c é $null.
Você também pode atribuir um único valor a várias variáveis encadeando as variáveis. Por exemplo, o comando a seguir atribui um valor de "três" a todas as quatro variáveis:
$a = $b = $c = $d = "three"
Cmdlets relacionados à variável
Além de usar uma operação de atribuição para definir um valor variável, você também pode usar o cmdlet Set-Variable. Por exemplo, o comando a seguir usa Set-Variable para atribuir uma matriz de 1, 2, 3 à variável $a.
Set-Variable -Name a -Value 1, 2, 3