about_Assignment_Operators

Breve descrição

Descreve como utilizar 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.

Syntax

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 não binários. Cada um tem versões de prefixo e postfixo.

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

A expressão atribuível tem de ser um número ou tem de ser convertível para um número.

Utilizar o operador de atribuição

As variáveis são espaços de memória denominados que armazenam valores. Armazena os valores em variáveis com o operador =de atribuição . O novo valor pode substituir o valor existente da variável ou pode acrescentar um novo valor ao valor existente. Por exemplo, a seguinte instrução atribui o valor do PowerShell à $MyShell variável:

$MyShell = "PowerShell"

Quando atribui um valor a uma variável no PowerShell, a variável é criada se ainda não existir. Por exemplo, a primeira das duas instruções de atribuição seguintes 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 o respetivo valor:

$a = 6
$a = 12

As variáveis no PowerShell não têm um tipo de dados específico, a menos que as castize. Quando uma variável contém apenas um objeto, a variável utiliza 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 . Por conseguinte, pode atribuir qualquer tipo de objeto à coleção. O exemplo seguinte mostra que pode adicionar objetos de processo, objetos de serviço, cadeias e números inteiros a uma variável sem gerar um erro:

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

Uma vez que o operador = de atribuição tem uma precedência inferior à do operador |de pipeline, os parênteses não são necessários para atribuir o resultado de um pipeline de comandos a uma variável. Por exemplo, o seguinte comando ordena os serviços no computador e, em seguida, atribui os serviços ordenados à $a variável:

$a = Get-Service | Sort-Object -Property name

Também pode atribuir o valor criado por uma instrução a uma variável, como no exemplo seguinte:

$a = if ($b -lt 0) { 0 } else { $b }

Este exemplo atribui zero à $a variável se o valor de $b for inferior a zero. Atribui o valor de $b a $a se o valor de $b não for inferior a zero.

Para atribuir uma matriz (múltiplos 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. Escreva um sinal de atalho @ seguido de pares chave/valor separados por ponto e vírgula ; e entre chavetas { }. Por exemplo, para atribuir uma tabela hash à $a variável, escreva:

$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) num valor decimal (neste caso, 16) e atribui esse valor à $a variável . Por exemplo, para atribuir um valor de 0x10 à $a variável, escreva:

$a = 0x10

Para atribuir um valor exponencial a uma variável, escreva o número de 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 1000 à $a variável, escreva:

$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 quilobytes à $a variável, escreva:

$a = 10kb

Utilizar operadores de atribuição composta

Os operadores de atribuição composta realizam operações numéricas nos valores antes da atribuição.

Importante

Os operadores de atribuição de compostos não utilizam o âmbito dinâmico. A variável está sempre no âmbito atual.

No exemplo seguinte, a variável $x é definida no âmbito global. As chavetas criam um novo âmbito. A variável $x dentro das chavetas é uma nova instância e não uma cópia da variável global.

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

Quando utiliza o operador de atribuição regular, obtém uma cópia da variável do âmbito principal. Mas repare que $x no âmbito principal 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 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, adiciona e, em seguida, atribui. Por conseguinte, as seguintes instruçõ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 seguinte mostra como utilizar o += operador para aumentar o valor de uma variável:

$a = 4
$a += 2
$a
6

Quando o valor da variável é uma cadeia, o valor no lado direito do operador é acrescentado à cadeia, 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 casting, pode acrescentar qualquer tipo de valor à matriz, da seguinte forma:

$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, utiliza o operador += para acrescentar outra tabela hash à tabela hash existente ao adicionar efetivamente um novo par chave/valor à tabela hash. 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 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 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. Este operador não pode ser utilizado com variáveis de cadeia e não pode ser utilizado para remover um elemento de uma coleção.

O -= operador combina duas operações. Primeiro, subtrai e, em seguida, atribui. Por conseguinte, as seguintes instruções são equivalentes:

$a -= 2
$a = ($a - 2)

O exemplo seguinte mostra como utilizar o -= operador para diminuir o valor de uma variável:

$a = 8
$a -= 2
$a
6

Também pode utilizar o -= operador de atribuição para diminuir o valor de um membro de uma matriz numérica. Para tal, especifique o índice do elemento de matriz que pretende alterar. No exemplo seguinte, 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 pode utilizar o -= operador para eliminar os valores de uma variável. Para eliminar todos os valores atribuídos a uma variável, utilize os cmdlets Clear-Item ou Clear-Variable para atribuir um valor de $null ou "" à variável.

$a = $null

Para eliminar um valor específico de uma matriz, utilize a notação de matriz para atribuir um valor de $null ao item específico. Por exemplo, a seguinte instrução elimina 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 eliminar uma variável, utilize o cmdlet Remove-Variable . Este método é útil quando a variável é explicitamente convertida num determinado tipo de dados e pretender uma variável não digitada. O comando seguinte elimina 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 de cadeia 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 seguinte mostra como utilizar 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 e, em seguida, atribui. Por conseguinte, as seguintes instruções são equivalentes:

$a *= 2
$a = ($a * 2)

Quando uma variável contém um valor de cadeia, o PowerShell acrescenta o número especificado de cadeias ao valor, da seguinte forma:

$a = "file"
$a *= 4
$a
filefilefilefile

Para multiplicar um elemento de uma matriz, utilize um índice para identificar o elemento que pretende multiplicar. Por exemplo, o seguinte comando multiplica o primeiro elemento na matriz (posição do índice 0) por 2:

$a[0] *= 2

A atribuição por operador de divisão

O operador /= de atribuição por divisão divide um valor numérico pelo valor especificado no lado direito do operador. O operador não pode ser utilizado com variáveis de cadeia.

O /= operador combina duas operações. Primeiro, divide-se e, em seguida, atribui. Por conseguinte, as duas instruções seguintes são equivalentes:

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

Por exemplo, o seguinte comando utiliza o /= operador para dividir o valor de uma variável:

$a = 8
$a /=2
$a
4

Para dividir um elemento de uma matriz, utilize um índice para identificar o elemento que pretende alterar. Por exemplo, o comando seguinte divide o segundo elemento na matriz (posição do índice 1) por 2:

$a[1] /= 2

A atribuição pelo operador modulus

O operador %= de atribuição por módulo divide o valor de uma variável pelo valor no lado direito do operador. Em seguida, o %= operador atribui o resto (conhecido como módulo) à variável . Só pode utilizar este operador quando uma variável contiver um único valor numérico. Não pode utilizar este operador quando uma variável contém uma variável de cadeia ou uma matriz.

O %= operador combina duas operações. Primeiro, divide e determina o resto e, em seguida, atribui o resto à variável. Por conseguinte, as seguintes instruções são equivalentes:

$a %= 2
$a = ($a % 2)

O exemplo seguinte mostra como utilizar o %= operador para guardar o módulo de um quociente:

$a = 7
$a %= 4
$a
3

Os operadores de incremento e decremento

O operador ++ incremento aumenta o valor de uma variável em 1. Quando utiliza o operador incremento numa instrução simples, não é devolvido nenhum valor. Para ver o resultado, apresente o valor da variável da seguinte forma:

$a = 7
++$a
$a
8

Para forçar a devolução de um valor, coloque a variável e o operador entre parênteses, da seguinte forma:

$a = 7
(++$a)
8

O operador de incremento pode ser colocado antes (prefixo) ou depois (postfixo) de uma variável. A versão de prefixo do operador incrementa uma variável antes de o respetivo valor ser utilizado na instrução, da seguinte forma:

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

A versão do postfixo do operador incrementa uma variável após o respetivo valor ser utilizado na instrução . No exemplo seguinte, as $c variáveis e $a têm valores diferentes porque o valor é atribuído antes $c$a das alterações:

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

O operador -- de decrementação diminui o valor de uma variável em 1. Tal como acontece com o operador incremento, nenhum valor é devolvido quando utiliza o operador numa instrução simples. Utilize parênteses para devolver um valor, da seguinte forma:

$a = 7
--$a
$a
6
(--$a)
5

A versão de prefixo do operador decrementa uma variável antes de o respetivo valor ser utilizado na instrução da seguinte forma:

$a = 7
$c = --$a
$a
6
$c
6

A versão do postfixo do operador decrementa uma variável após o respetivo valor ser utilizado na instrução . No exemplo seguinte, as $d variáveis e $a têm valores diferentes porque o valor é atribuído antes $d$a das alterações:

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

Operador de atribuição de agrupamento nulo

O operador ??= de atribuição de agrupamento nulo atribui o valor do seu operando à direita ao seu operando à esquerda apenas se o operando esquerdo for avaliado como nulo. O ??= operador não avalia 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, veja Operador de agrupamento nulo.

Microsoft .NET types (Tipos de .NET da Microsoft)

Por predefiniçã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 seguinte cria uma variável que tem o tipo System.Int32 :

$a = 6

Para localizar o tipo .NET de uma variável, utilize o método GetType e a respetiva propriedade FullName . Certifique-se de que inclui 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, atribua um valor de cadeia à variável . Para indicar que o valor é uma cadeia, 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, o PowerShell trata todas as operações como operações de cadeia e lança novos valores para cadeias. Isto ocorre no exemplo seguinte:

$a = "file"
$a += 3
$a
file3

Se o primeiro valor for um número inteiro, o PowerShell trata todas as operações como operações de números inteiros e lança novos valores para números inteiros. Isto ocorre no exemplo seguinte:

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

Pode converter uma nova variável escalar como qualquer tipo de .NET ao colocar o nome do tipo entre parênteses retos que precedem o nome da variável ou o primeiro valor de atribuição. Quando lança uma variável, está a definir o tipo de dados que podem ser armazenados na variável.

Por exemplo, o seguinte comando lança a variável como um tipo de cadeia:

[string]$a = 27
$a += 3
$a
273

O exemplo seguinte lança o primeiro valor, em vez de lançar a variável:

$a = [string]27

Não pode reformular o tipo de dados de uma variável existente se o respetivo 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, tem de substituir o respetivo valor da seguinte forma:

[int]$a = 3

Além disso, quando precede um nome de variável com um tipo de dados, o tipo dessa variável é bloqueado, a menos que substitua explicitamente o tipo ao especificar outro tipo de dados. Se tentar atribuir um valor incompatível com o tipo existente e não substituir explicitamente o tipo, o PowerShell apresenta um erro, conforme mostrado no exemplo seguinte:

$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 múltiplos itens numa matriz são processados 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 []. Este tipo de dados é específico para matrizes.

Por vezes, pode substituir o tipo predefinido ao especificar outro tipo. Por exemplo, o seguinte comando lança 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, pode atribuir qualquer tipo de dados .NET completamente qualificado que esteja disponível no processo atual. Por exemplo, o seguinte comando especifica um System.DateTime tipo de dados:

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

Será atribuído um valor à variável 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

Atribuir várias variáveis

No PowerShell, pode atribuir valores a múltiplas variáveis com 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. Isto é conhecido como várias atribuições.

Por exemplo, o comando seguinte 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 restantes valores serão atribuídos à última variável. Por exemplo, o seguinte comando contém três variáveis e cinco valores:

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

Por conseguinte, 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, utilize 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 de atribuição contiver menos elementos do que as variáveis, as variáveis restantes serão atribuídas ao valor $null. Por exemplo, o seguinte comando contém três variáveis e dois valores:

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

Por conseguinte, o PowerShell atribui o valor 1 à $a variável e o valor 2 à $b variável . A $c variável é $null.

Também pode atribuir um único valor a múltiplas variáveis ao encadear as variáveis. Por exemplo, o comando seguinte atribui um valor de "três" às quatro variáveis:

$a = $b = $c = $d = "three"

Além de utilizar uma operação de atribuição para definir um valor variável, também pode utilizar o cmdlet Set-Variable . Por exemplo, o seguinte comando utiliza Set-Variable para atribuir uma matriz de 1, 2, 3 à $a variável.

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

Ver também