Definir a proteção de acesso para variáveis, aliases e funções usando o modificador de escopo

Concluído

O Windows PowerShell fornece proteção de acesso a variáveis, aliases, funções e unidades do Windows PowerShell limitando onde elas podem ser alteradas e lidas. Ao impor algumas regras simples usando escopos do Windows PowerShell, você garante que não alterará inadvertidamente um item que não deve ser alterado. As regras básicas dos escopos são:

  • A menos que você o torne explicitamente privado, os itens incluídos em um escopo ficam visíveis no escopo no qual foram criados e em qualquer escopo filho. Você pode usar variáveis, aliases, funções ou unidades do Windows PowerShell em um ou mais escopos.
  • Os itens criados dentro de um escopo só podem ser alterados no escopo no qual foram criados, a menos que você tenha estipulado explicitamente um escopo diferente.

Se você criar um item em um escopo e o item tiver o mesmo nome que um item em um escopo diferente, o item original poderá ficar oculto sob o novo item. No entanto, ele não será substituído nem alterado.

Você pode usar variáveis locais em comandos remotos, mas deve indicar que a variável está definida na sessão local. O Windows PowerShell pressupõe que as variáveis usadas em comandos remotos sejam definidas na sessão na qual o comando é executado.

O modificador de escopo $Using:

Conforme mencionado anteriormente, começando com o Windows PowerShell 3.0, você pode implementar o modificador de escopo $Using: para identificar uma variável local em um comando remoto. Esse é um modificador de escopo especial e é a maneira mais simples de fazer referência a uma variável local em um comando remoto. Essa técnica passa os valores de variável para o computador remoto e, portanto, envolve menos processamento entre os hosts que estão sendo usados. Por padrão, presume-se que as variáveis em comandos remotos sejam definidas na sessão remota.

A sintaxe de Using é $Using:.

No exemplo a seguir, a variável $ps é criada na sessão local, mas é usada na sessão na qual o comando é executado. O modificador de escopo $Using: identifica $ps como uma variável local:

$ps = "Windows PowerShell" 

Invoke-Command -ComputerName LON-DC1 -ScriptBlock {Get-WinEvent -LogName $Using:ps}

Você também pode aplicar o modificador de escopo $Using: em PSSessions, como no exemplo a seguir:

$s = New-PSSession -ComputerName LON-DC1

$ps = "Windows PowerShell"

Invoke-Command -Sessions $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}