Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 no PowerShell. O PowerShell também tem os seguintes operadores de atribuição composto: , , +=, -=, *=, %=, ++, --, ??=.
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 posfixo.
<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 à variável $MyShell:
$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 variável $a 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 declaração altera apenas o 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 System.Object tipo de dados. 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 à 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 inferior a 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 de hash a uma variável, use a notação de tabela de hash padrão no PowerShell. Digite um sinal de arroba @ seguido de pares chave/valor que são separados por ponto-e-vírgula ; e encerrados entre chaves { }. Por exemplo, para atribuir uma hashtable à variável $a, 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 à 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 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 à variável $a, 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 à variável $a, 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 repare que $x no escopo pai não foi 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 ainda
$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.
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 a seguir tenta acrescentar um inteiro "1" à tabela de 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 através do 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 variável $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
Neste caso, o operador *= combina duas operações. Primeiro multiplica-se, 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 variáveis $c e $a têm valores diferentes porque o valor é atribuído a $c antes de $a alterar.
$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 variáveis $d e $a têm valores diferentes porque o valor é atribuído a $d antes de $a alterar.
$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 operando esquerdo somente se o operando esquerdo for avaliado como nulo. O operador ??= não avalia o operando à direita se o operando à esquerda for avaliado como não nulo.
$x = $null
$x ??= 100
$x
100
Para obter mais informações, consulte operador de coalescência nula.
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 System.Int32 tipo:
$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 GetType nome do método, mesmo que 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 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 variável escalar nova para qualquer tipo .NET colocando o nome do tipo entre colchetes antes do nome da variável ou do 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 seguinte faz a conversão do 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 é 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 que esteja disponível no processo atual. Por exemplo, o comando a seguir especifica um tipo de dados System.DateTime:
[System.DateTime]$a = "5/31/2005"
Será atribuído à variável 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
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. Isto é 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. 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
Este 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, será atribuído às variáveis restantes 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 a variáveis
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 à variável $a.
Set-Variable -Name a -Value 1, 2, 3
Consulte também
- about_Arrays
- sobre_Tabelas_Hash
- sobre_Variáveis
- Limpar-Variável
- Remove-Variable
- Definir-Variável