about_Assignment_Operators

Descrição breve

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 compostos: +=, -=, *=, %=, ++, --, . ??= Os operadores de atribuição compostos executam operações nos valores antes da atribuição.

Sintaxe

A sintaxe dos operadores de atribuição é a seguinte:

  • <assignable-expression> <assignment-operator> <value>

As expressões atribuíveis incluem variáveis e propriedades. O valor pode ser um único valor, uma matriz de valores ou um comando, expressão ou instrução.

Os operadores de incremento e decremento são operadores unários. Cada um tem versões de prefixo e postfix.

  • <assignable-expression><operator>
  • <operator><assignable-expression>

O valor da expressão atribuível deve ser um número ou deve ser conversível em um número.

Usando o operador de atribuição

As variáveis são denominadas espaços de memória 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 à $MyShell variável:

$MyShell = "PowerShell"

Quando você atribui um valor a uma variável no PowerShell, a variável é criada se ainda não existisse. Por exemplo, a primeira das duas instruções de atribuição a seguir cria a $a variável 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 instrução altera apenas 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, em seguida, atribui os serviços classificados à $a variável:

$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 à $a variável 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 de hash padrão no PowerShell. Digite um sinal @ de arroba seguido por pares chave/valor separados por ponto-e-vírgula ; e entre chaves { }. Por exemplo, para atribuir uma hashtable à $a variável, digite:

$a = @{one=1; two=2; three=3}

Para atribuir valores hexadecimais 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 à $a variável. Por exemplo, para atribuir um valor de 0x10 à $a variável, digite:

$a = 0x10

Para atribuir um valor exponencial a uma variável, digite o número raiz, a letra ee um número que represente um múltiplo de 10. Por exemplo, para atribuir um valor de 3,1415 à potência de 1.000 à $a variável, 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 kilobytes à $a variável, digite:

$a = 10kb

Usando operadores de atribuição compostos

Os operadores de atribuição compostos 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 é 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, acrescenta e depois 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 digitada por conversão, 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 à $a variável. 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. Este 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 $a variável. Este 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 diminui 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, 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) é diminuído em 1:

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

Não é possível 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 Clear-Item ou Clear-Variable para atribuir um valor de $null ou "" à variável.

$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 Remove-Variable . Esse método é útil quando a variável é explicitamente convertida em um tipo de dados específico e você deseja uma variável não tipada. O comando a seguir exclui a $a variável:

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, multiplica-se e depois 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, divide, depois atribui. Portanto, as duas instruções a seguir são equivalentes:

$a /= 2
$a = ($a / 2)

Por exemplo, o comando a seguir 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ê pode usar esse operador somente quando uma variável contém 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 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 postfix do operador incrementa uma variável depois que seu valor é usado na instrução. No exemplo a seguir, as $c variáveis e $a têm valores diferentes porque o valor é atribuído a $c antes $a das alterações:

$a = 7
$c = $a++
$a
8
$c
7

O operador -- de 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 diminui 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 postfix do operador diminui uma variável depois que seu valor é usado na instrução. No exemplo a seguir, as $d variáveis e $a têm valores diferentes porque o valor é atribuído a $d antes $a das alterações:

$a = 7
$d = $a--
$a
6
$d
7

Operador de atribuição de coalescência nula

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 coalescência nulo.

Tipos de 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 , mesmo que a chamada de método não tenha argumentos:

$a = 6
$a.GetType().FullName
System.Int32

Para criar uma variável que contém 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 inteiras e converterá novos valores em inteiros. Isso ocorre no exemplo a seguir:

$a = 6
$a += "3"
$a
9

Você pode converter uma nova variável escalar como qualquer tipo .NET colocando o nome do tipo entre colchetes que precedem o nome da variável ou o primeiro valor de atribuição. Ao converter uma variável, você está definindo o tipo de dados que podem ser armazenados na variável.

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

Não é possível reformular o tipo de dados de uma variável existente se seu valor não puder ser convertido para o 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 será 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 string [] matriz:

[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 que esteja disponível no processo atual. Por exemplo, o comando a seguir especifica um tipo de System.DateTime dados:

[System.DateTime]$a = "5/31/2005"

A variável receberá um valor que está em conformidade com o System.DateTime tipo de dados. O valor da variável seria o $a 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 de 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 à $a variável, o valor 2 à $b variável e o valor 3 à $c variável:

$a, $b, $c = 1, 2, 3

Se o valor de 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 à $a variável e o valor 2 à $b variável. Ele atribui os valores 3, 4 e 5 à $c variável. Para atribuir os valores na $c variável a três outras variáveis, use o seguinte formato:

$d, $e, $f = $c

Esse comando atribui o valor 3 à $d variável, o valor 4 à $e variável e o valor 5 à $f variável.

Se o valor de 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 à $a variável e o valor 2 à $b variável. A $c variável é $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"

Além de usar uma operação de atribuição para definir um valor de 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 à $a variável.

Set-Variable -Name a -Value 1, 2, 3

Confira também