about_Assignment_Operators

Breve descrição

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 composta : +=, -=, *=, %=, ++, --, ??=. 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>

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 decréscimo 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 convertí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 existia. 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 declaraçã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 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 lance. 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, os 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 por vírgulas, da seguinte forma:

$a = "apple", "orange", "lemon", "grape"

Para atribuir uma tabela hash a uma variável, utilize 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 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 da 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 kilobytes 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 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 é alterado.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

O operador de atribuição por adição

O operador += de atribuição por 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 declaraçõ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 string, o valor no lado direito do operador é acrescentado à string, da seguinte forma:

$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 transmissã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 hash, o operador += acrescenta o valor no lado direito do operador à tabela hash. No entanto, uma vez que o único tipo que pode adicionar a uma tabela hash é outra tabela hash, todas as outras atribuições falham.

Por exemplo, o seguinte comando atribui uma tabela 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. Este comando é bem-sucedido, como 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 seguinte tenta acrescentar um número inteiro “1” à tabela hash na variável $a. 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 pelo 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 declaraçõ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 por 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 determinado valor 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 para um tipo de dados específico e você deseja uma variável sem tipo. 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

Neste caso, o *= operador combina duas operações. Primeiro, multiplica-se e depois atribui-se. Portanto, as seguintes declaraçõ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 afirmaçõ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 pelo 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. Não é possível 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, divide e determina o restante e, em seguida, atribui o restante à variável. Portanto, as seguintes declaraçõ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 decréscimo

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 visualizar 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 do 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 decréscimo 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 do 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 coalescência nula atribui o valor de seu operando direito ao seu operando esquerdo somente se o operando esquerdo for avaliado como nulo. O ??= operador não avalia seu operando 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 do 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 forma:

$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 lançará novos valores para 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 valor da primeira atribuição. Ao transmitir 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 transmitir 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 é 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 string [] tipo de 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"

Será atribuído à variável um valor que esteja em conformidade com o System.DateTime tipo de dados. O valor da $a variável seria o seguinte:

Tuesday, May 31, 2005 12:00:00 AM

Atribuição de múltiplas 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 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 à $a variável e o valor 2 à $b variável. 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

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

Se o valor da atribuição contiver menos elementos do que as 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

Consulte também