Usar o escopo de variável em scripts do Windows PowerShell

Concluído

Intuitivamente, você pressupõe que a variável nomeada $computer que você definiu em uma função possa ser acessada no script quando a função for concluída. No entanto, esse não é o caso. As variáveis têm um escopo específico e são limitadas no modo como interagem entre escopos.

A tabela a seguir descreve os três escopos e como eles afetam o uso da variável.

Tabela 1: Escopos

Âmbito Descrição
Global O escopo global é para o prompt do Windows PowerShell. As variáveis definidas no prompt do Windows PowerShell podem ser revisadas em todos os scripts iniciados nesse prompt do Windows PowerShell. As variáveis criadas em um prompt do Windows PowerShell não existem em outros prompts do Windows PowerShell ou em instâncias do ISE (Ambiente de Script Integrado) do Windows PowerShell.
Script O escopo do script é para um único script. As variáveis definidas em um script podem ser revisadas por todas as funções dentro desse script. Se você definir um valor variável no escopo do script que já existe no escopo global, uma nova variável será criada no escopo do script. Haverá então duas variáveis de mesmo nome em dois escopos separados. Nesse ponto, quando você examina o valor da variável no script, é retornado o valor da variável no escopo do script.
Função O escopo da função é para uma única função. As variáveis definidas em uma função não são compartilhadas com outras funções nem com o script. Se você definir um valor variável no escopo da função que já existe no escopo global ou do script, uma nova variável será criada no escopo da função. Haverá então duas variáveis de mesmo nome em dois escopos separados.

Observação

Para evitar confusão, é uma prática recomendada evitar usar os mesmos nomes de variável em escopos diferentes.

Além de examinar uma variável em um escopo de nível superior, você também pode modificar essa variável fazendo referência especificamente ao escopo da variável ao modificá-lo. Para modificar uma variável de escopo do script de uma função, use a seguinte sintaxe:

$script:var = "Modified from function"

É uma prática recomendada evitar modificar variáveis entre escopos, pois isso pode causar confusão. Em vez disso, defina a variável de escopo do script igual à saída da função. Se os dados na função estiverem em uma variável, você poderá usar Return() para passá-los de volta para o script.

Veja a seguir um exemplo de como usar Return() no final de uma função para passar um valor variável de volta para o escopo do script:

Return($users) 

Observação

O uso de Return() em uma função adiciona os dados especificados ao pipeline de dados que estão sendo retornados, mas não substitui os dados existentes no pipeline. Como parte do desenvolvimento do script, você precisa verificar exatamente quais dados estão sendo retornados por uma função.