TÓPICO about_assignment_operators DESCRIÇÃO RESUMIDA 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. Eles podem executar operações numéricas nos valores antes da atribuição. O Windows PowerShell oferece suporte aos seguintes operadores de atribuição. Operador Descrição ------- ----------- = Define o valor de uma variável para o valor especificado. += Aumenta o valor de uma variável segundo o valor especificado ou acrescenta o valor especificado ao valor existente. -= Diminui do valor de uma variável o valor especificado. *= Multiplica o valor de uma variável pelo valor especificado ou acrescenta o valor especificado ao valor existente. /= Divide o valor de uma variável pelo valor especificado. %= Divide o valor de uma variável pelo valor especificado e atribui o resto (módulo) à variável. ++ Aumenta em 1 o valor de uma variável, propriedade que pode ser atribuída ou elemento da matriz. -- Diminui em 1 o valor de uma variável, propriedade que pode ser atribuída ou elemento da matriz. SINTAXE A sintaxe dos operadores de atribuição é a seguinte: <expressão-atribuível> <operador-atribuição> <valor> Expressões que podem ser atribuídas incluem variáveis e propriedades. O valor pode ser único, uma matriz de valores e também um comando, uma expressão ou uma instrução. Os operadores de incremento e decremento são operadores unários. Cada um deles tem versões prefixada e pós-fixada. <expressão-atribuível><operador> <operador><expressão-atribuível> A expressão atribuível deve ser um número ou deve poder ser convertida em um número. ATRIBUINDO VALORES Variáveis são espaços de memória nomeados 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. O operador de atribuição básico é o sinal de igual (=)(ASCII 61). Por exemplo, a instrução a seguir atribui o valor Windows PowerShell à variável $MyShell: $MyShell = "Windows PowerShell" Quando você atribui um valor a uma variável no Windows PowerShell, a variável é criada caso ainda não exista. Por exemplo, a primeira das duas instruções de atribuição a seguir cria a variável $a e atribui o valor 6 a $a. A segunda instrução de atribuição atribui o valor 12 a $a. A primeira instrução cria uma nova variável. A segunda instrução altera apenas seu valor: $a = 6 $a = 12 Variáveis no Windows PowerShell não têm um tipo de dados específico a menos que você as converta. Quando uma variável contiver apenas um objeto, ela assumirá o tipo de dados desse objeto. Quando uma variável contiver um conjunto de objetos, ela terá o tipo de dados System.Object. Portanto, você pode atribuir qualquer tipo de objeto ao conjunto. O exemplo a seguir mostra que você pode adicionar objetos de processos, 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 inferior à do 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 atribui os serviços classificados à variável $a: $a = get-service | sort name Você também pode atribuir o valor criado por uma instrução a uma variável, conforme mostrado no exemplo a seguir: $a = if ($b -lt 0) { 0 } else { $b } Este exemplo atribui 0 à variável $a se o valor de $b for menor que 0. Ele atribui o valor de $b a $a se o valor de $b não for menor que zero. O OPERADOR DE ATRIBUIÇÃO (=) O operador de atribuição (=)atribui valores a variáveis. Se a variável já tiver um valor, o operador de atribuição (=) substituirá o valor sem aviso. A instrução a seguir atribui o valor inteiro 6 à variável $a: $a = 6 Para atribuir um valor de cadeia de caracteres a uma variável, coloque o valor entre aspas, conforme mostrado a seguir: $a = "beisebol" Para atribuir uma matriz (vários valores) a uma variável, separe os valores com vírgulas, conforme mostrado a seguir: $a = "maçã", "laranja", "limão", "uva" Para atribuir uma tabela de hash a uma variável, use a notação padrão de tabela de hash no Windows PowerShell. Digite um sinal de arroba (@) seguido de pares de chave/valor separados por ponto-e-vírgulas (;) e colocados entre chaves ({ }). Por exemplo, para atribuir uma tabela de hash à variável $a, digite: $a = @{um=1; dois=2; três=3} Para atribuir valores hexadecimais a uma variável, coloque "0x" antes do valor. O Windows PowerShell converte o valor hexadecimal (0x10) em um valor decimal (neste caso, 16) e atribui esse valor à variável $a. Por exemplo, para atribuir o valor 0x10 à variável $a, digite: $a = 0x10 Para atribuir um valor exponencial a uma variável, digite o número da raiz, a letra "e" e um número que represente um múltiplo de 10. Por exemplo, para atribuir o valor 3,1415 elevado à potência 1.000 à variável $a, digite: $a = 3.1415e3 O Windows PowerShell também pode converter kilobytes (KB), megabytes (MB) e gigabytes (GB) em bytes. Por exemplo, para atribuir o valor 10 kilobytes à variável $a, digite: $a = 10kb 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 de a variável ter um tipo numérico ou de cadeia de caracteres e também de conter um único valor (escalar) ou vários valores (um conjunto). O operador += combina duas operações. Primeiro, ele adiciona e depois atribui. Portanto, 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 ao valor existente a quantidade especificada do 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: C:\PS> $a = 4 C:\PS> $a += 2 C:\PS> $a 6 Quando o valor da variável é uma cadeia de caracteres, o valor no lado direito do operador é acrescentado à cadeia, da seguinte forma: C:\PS> $a = "Windows" C:\PS> $a +- " PowerShell" C:\PS> $a Windows PowerShell Quando o valor da variável está em 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 forma: C:\PS> $a = 1,2,3 C:\PS> $a += 2 C:\PS> $a 1 2 3 2 C:\PS> $a += "String" C:\PS> $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. Porém, como o único tipo que você pode adicionar a uma tabela de hash é outra tabela de hash, todas as outras atribuições falharão. 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 de modo eficaz um novo par chave/valor à tabela de hash existente. Esse comando é bem-sucedido, conforme mostrado na saída: C:\PS> $a = @{a = 1; b = 2; c = 3} C:\PS> $a += @{mode = "write"} C:\PS> $a Nome Valor ---- ----- a 1 b 2 mode write c 3 O seguinte comando tenta acrescentar um inteiro (1) à tabela de hash na variável $a. Este comando falha: C:\PS> $a = @{a = 1; b = 2; c = 3} C:\PS> $a += 1 Você pode adicionar outra tabela de hash somente a uma tabela de hash. At line:1 char:6 + $a += <<<< 1 O OPERADOR DE ATRIBUIÇÃO POR SUBTRAÇÃO (-=) O operador de atribuição por subtração -= decrementa do valor de uma variável o 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 um conjunto. O operador -= combina duas operações. Primeiro, ele subtrai. Depois, atribui. Portanto, as seguintes instruçõ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: C:\PS> $a = 8 C:\PS> $a -= 2 C:\PS> $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 isso, especifique o índice do elemento da matriz que deseja alterar. No exemplo a seguir, o valor do terceiro elemento de uma matriz (elemento 2) é diminuído em 1: C:\PS> $a = 1,2,3 C:\PS> $a[2] -= 1. C:\PS> $a 1 2 2 Você não pode usar o operador -= para excluir os valores de uma variável. Para excluir todos os valores que são atribuídos a uma variável, use os cmdlets Clear-Item ou Clear-Variable para atribuir o valor $null ou "" à variável. $a = $null Para excluir um valor específico de uma matriz, use notação de matriz para atribuir o valor $null ao item específico. Por exemplo, a seguinte instrução exclui o segundo valor (posição de índice 1) da matriz. C:\PS> $a = 1,2,3 C:\PS> $a 1 2 3 C:\PS> $a[1] = $null C:\PS> $a 1 3 Para excluir uma variável, use o cmdlet Remove-Variable. Esse método é útil quando a variável é convertida explicitamente em 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 a O OPERADOR DE A ATRIBUIÇÃO POR MULTIPLICAÇÃO (*=) O operador de atribuição por 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. O exemplo a seguir mostra como usar o operador *= para multiplicar o valor de uma variável: C:\PS> $a = 3 C:\PS> $a *= 4 C:\PS> $a 12 Neste caso, o operador *= combina duas operações. Primeiro, ele multiplica. Depois, atribui. Portanto, as seguintes instruções são equivalentes: $a *= 2 $a = ($a * 2) Quando uma variável contém um valor de cadeia de caracteres, o Windows PowerShell acrescenta o número especificado de cadeias ao valor, conforme mostrado a seguir: C:\PS> $a = "arquivo" C:\PS> $a *= 4 C:\PS> $a arquivoarquivoarquivoarquivo Para multiplicar um elemento de uma matriz, use um índice para identificar o elemento que deseja multiplicar. Por exemplo, o comando a seguir multiplica o primeiro elemento da matriz (posição de índice 0) por 2: $a[0] *= 2 O OPERADOR DE ATRIBUIÇÃO POR 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 usado com variáveis de cadeias de caracteres. O operador /= combina duas operações. Primeiro, ele divide. Depois, atribui. Portanto, as duas seguintes instruções 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: C:\PS> $a = 8 C:\PS> $a /=2 C:\PS> $a 4 Para dividir um elemento de uma matriz, use um índice para identificar o elemento que deseja alterar. Por exemplo, o comando a seguir divide o segundo elemento na matriz (posição de índice 1) por 2: $a[1] /= 2 O OPERADOR DE ATRIBUIÇÃO POR MÓDULO (%=) 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. Você só pode usar esse operador quando uma variável contém um único valor numérico. Não é possível usá-lo 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 resto e, em seguida, atribui o resto à variável. Portanto, as seguintes instruções são equivalentes: $a %= 2 $a = ($a % 2) O exemplo a seguir mostra como usar o operador %= para salvar o resto de um quociente: C:\PS> $a = 7 C:\PS> $a %= 4 C:\PS> $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 ver o resultado, exiba o valor da variável, da seguinte forma: C:\PS> $a = 7 C:\PS> ++$a C:\PS> $a 8 Para forçar um valor a ser retornado, coloque a variável e o operador entre parênteses, da seguinte forma: C:\PS> $a = 7 C:\PS> (++$a) 8 O operador de incremento pode ser colocado antes de (prefixado) ou depois de (pós-fixado) uma variável. A versão prefixada do operador incrementa uma variável antes de seu valor ser usado na instrução, da seguinte forma: C:\PS> $a = 7 C:\PS> $c = ++$a C:\PS> $a 8 C:\PS> $c 8 A versão pós-fixada do operador incrementa uma variável depois de seu valor ser 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 ser alterada: C:\PS> $a = 7 C:\PS> $c = $a++ C:\PS> $a 8 C:\PS> $c 7 O operador de decremento (--) reduz o valor de uma variável em 1. Como ocorre com o operador de incremento, nenhum valor é retornado quando se usa o operador em uma instrução simples. Use parênteses para retornar um valor, da seguinte forma: C:\PS> $a = 7 C:\PS> --$a C:\PS> $a 6 C:\PS> (--$a) 5 A versão prefixada do operador decrementa uma variável antes de seu valor ser usado na instrução, da seguinte forma: C:\PS> $a = 7 C:\PS> $c = --$a C:\PS> $a 6 C:\PS> $c 6 A versão pós-fixada do operador decrementa uma variável depois de seu valor ser 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 ser alterada: C:\PS> $a = 7 C:\PS> $d = $a-- C:\PS> $a 6 C:\PS> $d 7 TIPOS DO MICROSOFT .NET FRAMEWORK Por padrão, quando uma variável tem apenas um valor, o valor atribuído a ela determina o tipo de dados da variável. Por exemplo, o comando a seguir cria uma variável que tem o tipo Inteiro (System.Int32): $a = 6 Para localizar o tipo do .NET Framework de uma variável, use o método GetType e sua propriedade FullName, conforme mostrado a seguir. Inclua os parênteses depois do nome de método GetType, mesmo que a chamada de método não tenha argumentos: C:\PS> $a = 6 C:\PS> $a.gettype().fullname System.Int32 Para criar uma variável que contenha uma cadeia de caracteres, atribua um valor da cadeia de caracteres à variável. Para indicar que o valor é uma cadeia de caracteres, coloque-o entre aspas, conforme mostrado a seguir: C:\PS> $a = "6" C:\PS> $a.gettype().fullname System.String Se o primeiro valor atribuído à variável for uma cadeia de caracteres, o Windows PowerShell tratará todas as operações como de cadeias de caracteres e converterá novos valores em cadeias. Isso ocorre no seguinte exemplo: C:\PS> $a = "arquivo" C:\PS> $a += 3 C:\PS> $a arquivo3 Se o primeiro valor for um número inteiro, o Windows PowerShell tratará todas as operações como sendo com inteiros e converterá novos valores em inteiros. Isso ocorre no seguinte exemplo: C:\PS> $a = 6 C:\PS> $a += "3" C:\PS> $a 9 Você pode converter uma nova variável escalar em qualquer tipo do .NET Framework, colocando o nome do tipo entre colchetes, que precedam o nome da variável ou o primeiro valor de atribuição. Ao converter uma variável, você pode determinar os tipos de dados que podem ser armazenados na variável. Pode determinar também como a variável se comporta quando você a manipula. Por exemplo, o comando a seguir converte a variável como um tipo de cadeia de caracteres: C:\PS> [string]$a = 27 C:\PS> $a += 3 C:\PS> $a 273 O exemplo a seguir converte o primeiro valor, em vez de converter a variável: $a = [string]27 Ao converter uma variável para um tipo específico, a convenção comum é converter a variável, mas não o valor. Porém, você não poderá reconverter o tipo de dados de uma variável existente se o seu valor não puder ser convertido no novo tipo de dados. Para alterar o tipo de dados, você deve substituir seu valor, da seguinte forma: C:\PS> $a = "string" C:\PS> [int]$a Não é possível converter o valor "string" para o tipo "System.Int32". Erro: "A cadeia de caracteres de entrada não está em um formato correto". At line:1 char:8 + [int]$a <<<< C:\PS> [int]$a =3 Além disso, ao colocar um tipo de dados antes do nome de uma variável, o tipo dessa variável é bloqueado até que você substitua explicitamente o tipo, especificando outro tipos de dados. Se você tentar atribuir um valor incompatível com o tipo existente e não substituir explicitamente o tipo, o Windows PowerShell exibirá um erro, conforme mostrado no exemplo a seguir: C:\PS> $a = 3 C:\PS> $a = "string" C:\PS> [int]$a = 3 C:\PS> $a = "string" Não é possível converter o valor "string" para o tipo "System.Int32". Erro: "A cadeia de caracteres de entrada não está em um formato correto". At line:1 char:3 + $a <<<< = "string" C:\PS> [string]$a = "string" No Windows PowerShell, os tipos de dados de variáveis que contêm vários itens em uma matriz são tratados de modo diferente dos tipos de dados de variáveis que contêm um único item. A menos que um tipo de dados seja especificamente atribuído a uma variável de matriz, ele sempre será System.Object []. Esse tipo de dados é específico de matrizes. Em alguns casos, você pode substituir o tipo padrão especificando outro tipo. Por exemplo, o comando a seguir converte a variável em um tipo de matriz string []: [string []] $a = "um", "dois", "três" As variáveis do Windows PowerShell podem ser de qualquer tipo de dados do .NET Framework. Além disso, você pode atribuir qualquer tipo de dados totalmente qualificado do .NET Framework disponível no processo atual. Por exemplo, o seguinte comando especifica um tipo de dados System.DateTime: [system.datetime]$a = "31/5/2005" Será atribuído um valor à variável em conformidade com o tipo de dados System.DateTime. O valor da variável $a seria o seguinte: Terça-feira, 31 de maio de 2005 00:00:00 ATRIBUINDO VÁRIAS VARIÁVEIS No Windows PowerShell, você pode atribuir valores a muitas variáveis com um único comando. O primeiro elemento do valor de atribuição é atribuído à primeira variável, o segundo é atribuído à segunda, o terceiro à terceira e assim por diante. 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. C:\PS> $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 Windows PowerShell atribui o valor 1 à variável $a e o valor 2 à variável $b. Ele 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 Esse comando atribui o valor 3 à variável $d, o valor 4 à variável $e e o valor 5 à variável $f. 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 = "três" 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 about_Hash_Tables about_Variables Clear-Variable Remove-Variable Set-Variable