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 e
e 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 MB
e 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"
Cmdlets relacionados com variáveis
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