Impostare la protezione dell'accesso a variabili, alias e funzioni usando il modificatore di ambito

Completato

Windows PowerShell offre la protezione dell'accesso a variabili, alias, funzioni e drive Windows PowerShell definendo i limiti in cui possono essere modificati e letti. Applicando alcune semplici regole con gli ambiti di Windows PowerShell, ci si assicura di non cambiare inavvertitamente un elemento che non deve essere cambiato. Le regole di base degli ambiti sono:

  • A meno che non vengano esplicitamente resi privati, gli elementi inclusi in un ambito sono visibili nell'ambito in cui sono stati creati e in qualsiasi ambito figlio. È possibile usare variabili, alias, funzioni o unità Windows PowerShell in uno o più ambiti.
  • Gli elementi creati all'interno di un ambito possono essere cambiati solo in questo stesso ambito, a meno che non ne venga esplicitamente specificato uno diverso.

Se in un ambito si crea un elemento con lo stesso nome di un altro elemento incluso in un ambito diverso, l'elemento originale potrebbe risultare nascosto dietro quello nuovo. Tuttavia, non viene sostituito né cambiato.

È possibile usare le variabili locali nei comandi remoti, ma è necessario indicare sono definite nella sessione locale. Windows PowerShell presuppone che le variabili usate nei comandi remoti vengano definite nella sessione in cui viene eseguito il comando.

Modificatore di ambito $Using:

Come accennato in precedenza, a partire da Windows PowerShell 3.0, è possibile implementare il modificatore di ambito $Using: per identificare una variabile locale in un comando remoto. Si tratta di un modificatore di ambito speciale e rappresenta il modo più semplice per fare riferimento a una variabile locale in un comando remoto. Questa tecnica passa i valori delle variabili al computer remoto e quindi comporta una minore elaborazione tra gli host in uso. Per impostazione predefinita, si suppone che le variabili nei comandi remoti siano definite nella sessione remota.

La sintassi di Using è $Using:.

Nell'esempio seguente la variabile $ps viene creata nella sessione locale, ma viene usata nella sessione in cui viene eseguito il comando. Il modificatore di ambito $Using: identifica $ps come variabile locale:

$ps = "Windows PowerShell" 

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

È anche possibile applicare il modificatore di ambito $Using: in PSSessions, come nell'esempio seguente:

$s = New-PSSession -ComputerName LON-DC1

$ps = "Windows PowerShell"

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