Ange åtkomstskydd till variabler, alias och funktioner med hjälp av omfångsmodifieraren

Slutförd

Windows PowerShell ger åtkomstskydd till variabler, alias, funktioner och Windows PowerShell-enheter genom att begränsa var de kan ändras och läsas. Genom att tillämpa några enkla regler med Windows PowerShell-omfång ser du till att du inte oavsiktligt ändrar ett objekt som inte ska ändras. De grundläggande reglerna för omfång är:

  • Om du inte uttryckligen gör objekten privata visas de objekt som du tar med i ett omfång i det omfång där de skapades och i alla underliggande omfång. Du kan använda variabler, alias, funktioner eller Windows PowerShell-enheter i ett eller flera omfång.
  • Objekt som du skapar inom ett omfång kan bara ändras i det omfång där objektet skapades om du inte uttryckligen anger ett annat omfång.

Om du skapar ett objekt i ett omfång och objektet har samma namn som ett objekt i ett annat omfång, kan det ursprungliga objektet döljas under det nya objektet. Den blir dock inte åsidosatt eller ändrad.

Du kan använda lokala variabler i fjärrkommandon, men du måste ange att variabeln definieras i den lokala sessionen. Windows PowerShell förutsätter att variablerna som används i fjärrkommandon definieras i sessionen där kommandot körs.

$Using: omfångsmodifierare

Som tidigare nämnts kan du, från och med Windows PowerShell 3.0, implementera $Using: omfångsmodifieraren för att identifiera en lokal variabel i ett fjärrkommando. Detta är en särskild omfångsmodifierare och är det enklaste sättet att referera till en lokal variabel i ett fjärrkommando. Den här tekniken överför variabelvärdena till fjärrdatorn och innebär därför mindre bearbetning över de värdar som används. Som standard antas variabler i fjärrkommandon definieras i fjärrsessionen.

Syntaxen för Using är $Using:.

I följande exempel skapas variabeln $ps i den lokala sessionen men används i den session där kommandot körs. Omfångsmodifieraren $Using: identifierar $ps som en lokal variabel.

$ps = "Windows PowerShell" 

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

Du kan också använda $Using: omfångsmodifieraren i PSSessioner, till exempel i följande exempel:

$s = New-PSSession -ComputerName LON-DC1

$ps = "Windows PowerShell"

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