Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nota editorial
Importante
A Especificação de Linguagem do Windows PowerShell 3.0 foi publicada em dezembro de 2012 e se baseia no Windows PowerShell 3.0. Essa especificação não reflete o estado atual do PowerShell. Não há nenhum plano para atualizar essa documentação para refletir o estado atual. Esta documentação é apresentada aqui para referência histórica.
O documento de especificação está disponível como um documento do Microsoft Word do Centro de Download da Microsoft em: https://www.microsoft.com/download/details.aspx?id=36389 esse documento do Word foi convertido para apresentação aqui no Microsoft Learn. Durante a conversão, algumas alterações editoriais foram feitas para acomodar a formatação para a plataforma Docs. Alguns erros de digitação e pequenos foram corrigidos.
Uma variável representa um local de armazenamento para um valor e esse valor tem um tipo. As linguagens de programação de procedimento tradicionais são tipadas estaticamente; ou seja, o tipo de runtime de uma variável é aquele com o qual ela foi declarada em tempo de compilação. Linguagens orientadas a objeto adicionam a ideia de herança, que permite que o tipo de runtime de uma variável seja aquele com o qual ela foi declarada em tempo de compilação ou algum tipo derivado desse tipo. Sendo uma linguagem tipada dinamicamente, as variáveis do PowerShell não têm tipos, por si só. Na verdade, as variáveis não são definidas; elas simplesmente passam a existir quando recebem um valor pela primeira vez. E embora uma variável possa ser restrita (§5,3) para manter um valor de determinado tipo, as informações de tipo em uma atribuição nem sempre podem ser verificadas estaticamente.
Em momentos diferentes, uma variável pode estar associada a valores de diferentes tipos por meio da atribuição (§7,11) ou do uso dos operadores ++
e ‑‑
(§7.1.5, §7.2.6). Quando o valor associado a uma variável é alterado, o tipo desse valor pode ser alterado. Por exemplo
$i = "abc" # $i holds a value of type string
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
Qualquer uso de uma variável que não foi criada resulta no valor $null. Para ver se uma variável foi definida, use o cmdlet
5.1 Local gravável
Um local gravável é uma expressão que designa um recurso ao qual um comando tem acesso tanto para leitura quanto para gravação. Um local gravável pode ser uma variável (§5), um elemento de matriz (§9), um valor associado em um Hashtable acessado por meio de um subscrito (§10), uma propriedade (§7.1.2) ou armazenamento gerenciado por um provedor (§3.1).
5.2 Categorias de variáveis
O PowerShell define as seguintes categorias de variáveis: variáveis estáticas, variáveis de instância, elementos de matriz, pares chave/valor Hashtable, parâmetros, variáveis comuns e variáveis em drives de provedores. As subseções a seguir descrevem cada uma dessas categorias.
No exemplo a seguir
function F ($p1, $p2) {
$radius = 2.45
$circumference = 2 * ([Math]::PI) * $radius
$date = Get-Date -Date "2010-2-1 10:12:14 pm"
$month = $date.Month
$values = 10, 55, 93, 102
$value = $values[2]
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h1.FirstName = "Smith"
$Alias:A = "Help"
$Env:MyPath = "e:\Temp"
${E:output.txt} = 123
$function:F = { "Hello there" }
$Variable:v = 10
}
[Math::PI]
é uma variável estática$date.Month
é uma variável de instância$values[2]
é um elemento de matriz$h1.FirstName
é uma chaveHashtable
cujo valor correspondente é $h 1['FirstName']'$p1
e$p2
são parâmetros$radius
,$circumference
,$date
,$month
,$values
,$value
e$h1
são variáveis comuns-
$Alias:A
,$Env:MyPath
,${E:output.txt}
e$function:F
são variáveis nas unidades do provedor correspondente. -
$Variable:v
é, na verdade, uma variável comum escrita com sua unidade de provedor totalmente qualificada.
5.2.1 Variáveis estáticas
Um membro de dados de um objeto que pertence ao tipo do objeto em vez dessa instância específica do tipo é chamado de variável estática . Consulte §4.2.3, §4.2.4.1e §4.3.8 para alguns exemplos.
O PowerShell não fornece nenhuma maneira de criar novos tipos que contêm variáveis estáticas; no entanto, objetos desses tipos podem ser fornecidos pelo ambiente de host.
A memória para criar e excluir objetos que contêm variáveis estáticas é gerenciada pelo ambiente do host e pelo sistema de coleta de lixo.
Consulte §7.1.2 para obter informações sobre como acessar uma variável estática.
Um membro de dados estáticos pode ser um campo ou uma propriedade.
5.2.2 Variáveis de instância
Um membro de dados de um objeto que pertence a uma instância específica do tipo do objeto, e não ao tipo em si, é chamado de variável de instância. Consulte do §4.3.1, §4.3.2e §4.3.3 para alguns exemplos.
Um ambiente de host do PowerShell pode fornecer uma maneira de criar novos tipos que contêm variáveis de instância ou adicionar novas variáveis de instância aos tipos existentes.
A memória para criar e excluir objetos que contêm variáveis estáticas é gerenciada pelo ambiente do host e pelo sistema de coleta de lixo.
Consulte do §7.1.2 para obter informações sobre como acessar uma variável de instância.
Um membro de dados de instância pode ser um campo ou uma propriedade.
5.2.3 Elementos de matriz
Uma matriz pode ser criada por meio de um operador de vírgula unária (seção 7.2.1), uma sub-expressão (seção 7.1.6), uma array-expression (seção 7.1.7), um operador de vírgula binária (seção 7.3), um operador de intervalo (seção 7.4) ou um cmdlet New-Object.
A memória para criar e excluir matrizes é gerenciada pelo ambiente de host e pelo sistema de coleta de lixo.
Matrizes e elementos de matriz são discutidos em §9.
5.2.4 Pares chave/valor de tabela de hash
Uma tabela de hash é criada por meio de um literal de hash (seção 2.3.5.6) ou do cmdlet New-Object. Um novo par chave/valor pode ser adicionado por meio do operador []
(§7.1.4.3).
A memória para criar e excluir Hashtables é gerenciada pelo ambiente de host e pelo sistema de coleta de lixo.
As tabelas hash são discutidas no §10.
5.2.5 Parâmetros
Um parâmetro é criado quando seu comando pai é invocado e é inicializado com o valor do argumento fornecido na invocação ou pelo ambiente do host. Um parâmetro deixa de existir quando o comando pai é encerrado.
Os parâmetros são discutidos no §8.10.
5.2.6 Variáveis comuns
Uma variável comum é definida por uma expressão de atribuição (§7.11) ou um comando foreach (§8.4.4). Algumas variáveis comuns são predefinidas pelo ambiente de host, enquanto outras são transitórias, indo e vindo conforme necessário no runtime.
O tempo de vida de uma variável comum é aquela parte da execução do programa durante a qual o armazenamento tem garantia de ser reservado para ela. Esse tempo de vida começa na entrada no escopo com o qual está associado e termina não antes do final da execução desse escopo. Se o escopo pai for inserido de forma recursiva ou iterativa, uma nova instância da variável local será criada sempre.
O armazenamento referenciado por uma variável comum é recuperado independentemente do tempo de vida dessa variável.
Uma variável comum pode ser nomeada explicitamente com um prefixo Variable: namespace (seção 5.2.7).
5.2.7 Variáveis em unidades de provedor
O conceito de provedores e unidades é apresentado na seção 3.1, com cada provedor podendo fornecer suas próprias unidades de namespace. Isso permite que os recursos nessas unidades sejam acessados como se fossem variáveis comuns (§5.2.6). Na verdade, uma variável comum é armazenada na unidade do provedor do sistema de arquivos Variável: (seção 3.1.5) e pode ser acessada por seu nome comum ou seu nome de namespace totalmente qualificado.
Alguns tipos de variável de namespace são restringidos implicitamente (§5.3).
5.3 Variáveis restritas
Por padrão, uma variável pode designar um valor de qualquer tipo. No entanto, uma variável pode ser restrita à designação de valores de um determinado tipo, especificando esse tipo como um literal de tipo antes de seu nome em uma atribuição ou um parâmetro. Por exemplo
[int]$i = 10 # constrains $i to designating ints only
$i = "Hello" # error, no conversion to int
$i = "0x10" # ok, conversion to int
$i = $true # ok, conversion to int
function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }
Qualquer variável que pertença ao namespace Env:, Alias:ou ao namespace do sistema de arquivos (§2.3.2, §3.1) é restringida implicitamente ao tipo string
. Qualquer variável que pertença ao namespace Function: (§2.3.2, §3.1) é restringida implicitamente ao tipo scriptblock
.