Sobre análise
DESCRIÇÃO BREVE
Descreve como o PowerShell analisa comandos.
DESCRIÇÃO LONGA
Quando você insere um comando no prompt de comando, o PowerShell divide o texto do comando em uma série de segmentos chamados "tokens" e determina como interpretar cada "token".
Por exemplo, se você digitar:
Write-Host livro
O PowerShell divide o comando a seguir em dois tokens, "Write-Host" e "book", e interpreta cada token de forma independente.
Ao processar um comando, o analisador do PowerShell opera no modo de expressão ou no modo de argumento:
No modo de expressão, os valores de cadeia de caracteres devem estar contidos entre aspas. Os números não colocados entre aspas são tratados como valores numéricos (em vez de como uma série de caracteres).
No modo de argumento, cada valor é tratado como uma cadeia de caracteres expansível, a menos que comece com um dos seguintes caracteres especiais: cifrão ($), sinal de sinal (@), aspas simples ('), aspas duplas () ou parênteses de abertura (().
Se precedido por um desses caracteres, o valor será tratado como uma expressão de valor.
A tabela a seguir fornece vários exemplos de comandos processados no modo de expressão e no modo de argumento e os resultados produzidos por esses comandos.
Exemplo | Mode | Result |
---|---|---|
2+2 | Expression | 4 (inteiro) |
Write-Output 2+2 | Argumento | "2+2" (cadeia de caracteres) |
Write-Output (2+2) | Expression | 4 (inteiro) |
$a = 2+2 | Expression | $a = 4 (inteiro) |
Write-Output $a | Expression | 4 (inteiro) |
Write-Output $a/H | Argumento | "4/H" (cadeia de caracteres) |
Cada token pode ser interpretado como algum tipo de objeto, como booliano ou cadeia de caracteres. O PowerShell tenta determinar o tipo de objeto da expressão. O tipo de objeto depende do tipo de parâmetro que um comando espera e se o PowerShell sabe como converter o argumento para o tipo correto. A tabela a seguir mostra vários exemplos dos tipos atribuídos aos valores retornados pelas expressões.
Exemplo | Mode | Result |
---|---|---|
Write-Output !1 | argumento | "!1" (cadeia de caracteres) |
Write-Output (!1) | expressão | False (booliano) |
Write-Output (2) | expressão | 2 (inteiro) |
O símbolo de stop-parsing (--%), introduzido no PowerShell 3.0, orienta o PowerShell a se abster de interpretar a entrada como comandos ou expressões do PowerShell.
Ao chamar um programa executável no PowerShell, coloque o símbolo de stop-parsing antes dos argumentos do programa. Essa técnica é muito mais fácil do que usar caracteres de escape para evitar interpretação incorreta.
Quando ele encontra um símbolo de parada de análise, o PowerShell trata os caracteres restantes na linha como um literal. A única interpretação que ele executa é substituir valores para variáveis de ambiente que usam notação padrão do Windows, como %USERPROFILE%.
O símbolo de stop-parsing só será eficaz até o próximo caractere de nova linha ou pipeline. Você não pode usar um caractere de continuação (') para estender seu efeito ou usar um delimitador de comando (;) para encerrar seu efeito.
Por exemplo, o comando a seguir chama o programa Icacls.
icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
Para executar esse comando no PowerShell 2.0, você deve usar caracteres de escape para impedir que o PowerShell interprete mal os parênteses.
icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F
A partir do PowerShell 3.0, você pode usar o símbolo de parada de análise.
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
O PowerShell envia a seguinte cadeia de caracteres de comando para o programa Icacls:
X:\VMS /grant Dom\HVAdmin:(CI)(OI)F