Sie sind auf Seite 1von 10

THEMA

about_Scopes
KURZBESCHREIBUNG
Erklrt den Begriff des Bereichs in Windows PowerShell und zeigt,
wie der Bereich von Elementen festgelegt oder gendert werden kann.

DETAILBESCHREIBUNG
Windows PowerShell schtzt den Zugriff auf Variablen, Aliase,
Funktionen und Windows PowerShell-Laufwerke (PSDrives), indem die
Bereiche eingeschrnkt werden, in denen diese Elemente gelesen
oder gendert werden knnen. Windows PowerShell erzwingt einige
wenige, einfache Bereichsregeln, um sicherzustellen, dass
Elemente nicht ungewollt gendert werden.
Fr Bereiche gelten die folgenden Grundregeln:
- Ein Element, das Sie in einen Bereich einschlieen, ist in
dem Bereich, in dem es erstellt wurde, und in untergeordneten
Bereichen sichtbar, es sei denn, es wird explizit als privat (nicht
ffentlich) definiert. Sie knnen Variablen, Aliase, Funktionen oder
Windows PowerShell-Laufwerke in einem oder in mehreren Bereichen
platzieren.
- Ein Element, das Sie innerhalb eines Bereichs erstellt
haben, kann nur in dem Bereich gendert werden, in dem es
erstellt wurde, auer es wird explizit ein anderer Bereich
angegeben.
Wenn Sie in einem Bereich ein Element erstellen und der Name des
Elements mit dem Namen eines Elements in einem anderen Bereich
bereinstimmt, wird das ursprngliche Element durch das neue
Element ausgeblendet und ist nicht mehr zugnglich. Es wird
jedoch nicht berschrieben oder gendert.
Windows PowerShell-Bereiche
Bereiche in Windows PowerShell haben sowohl Namen als auch
Zahlen. Die benannten Bereiche geben einen absoluten Bereich an.
Bei den Zahlen handelt es sich um relative Angaben, die die
Beziehungen zwischen den Bereichen wiedergeben.
Global:
Der Bereich, der beim Start von Windows PowerShell gltig
ist. Variablen und Funktionen, die bereits beim Start von
Windows PowerShell verfgbar sind, werden im globalen Bereich
erstellt. Dieser Bereich schliet die automatischen und die
Einstellungsvariablen ein. Er beinhaltet auch die Variablen,
Aliase und Funktionen aus Ihren Windows PowerShell-Profilen.
Lokal:
Der aktuelle Bereich. Sowohl der globale Bereich als auch
jeder andere Bereich kann zu einem bestimmten Zeitpunkt den
lokalen Bereich darstellen.
Skript:
Der Bereich, der erstellt wird, whrend eine Skriptdatei
ausgefhrt wird. Nur die Befehle innerhalb des Skripts werden
im Skriptbereich ausgefhrt. Fr die Befehle in einem Skript
stellt der Skriptbereich den lokalen Bereich dar.
Privat:
Elemente in einem privaten Bereich sind auerhalb des aktuel-
len Bereichs nicht sichtbar. Sie knnen den privaten Bereich
verwenden, um in einem anderen Bereich eine private Version
eines Elements zu erstellen, das den gleichen Namen aufweist.
Nummerierte Bereiche:
Sie knnen auf einen Bereich ber den Namen oder ber einen
Zahlenwert verweisen, der die Position eines Bereichs relativ
zu einem anderen Bereich beschreibt.
Bereich 0 stellt den aktuellen bzw. lokalen Bereich dar. Bereich 1
verweist auf den unmittelbar bergeordneten Bereich. Bereich 2
verweist auf den bergeordneten Bereich dieses bergeordneten
Bereichs usw. Nummerierte Bereiche sind dann hilfreich, wenn Sie
viele rekursive Bereiche erstellt haben.
bergeordnete und untergeordnete Bereiche

Sie knnen durch das Ausfhren eines Skripts oder einer Funktion,
durch das Erstellen einer Sitzung oder durch das Starten einer
neuen Instanz von Windows PowerShell einen neuen Bereich
erstellen. Wenn Sie einen neuen Bereich erstellen, erhalten Sie
einen bergeordneten Bereich (der ursprngliche Bereich) und
einen untergeordneten Bereich (der neu erstellte Bereich).
In Windows PowerShell sind alle Bereiche untergeordnete Bereiche
des globalen Bereichs, aber Sie knnen viele Bereiche und viele
rekursive Bereiche erstellen.
Sofern Sie Elemente nicht explizit als privat definieren, sind
Elemente des bergeordneten Bereichs auch im untergeordneten
Bereich verfgbar. Wenn Sie jedoch Elemente im untergeordneten
Bereich erstellen und ndern, haben diese Elemente keinen
Einfluss auf den bergeordneten Bereich, es sei denn, Sie geben
beim Erstellen des Elements explizit einen Bereich an.

Vererbung

Ein untergeordneter Bereich erbt die Variablen, Aliase und
Funktionen nicht vom bergeordneten Bereich. Sofern ein Element
nicht als privat definiert ist, kann im untergeordneten Bereich
auf das Element zugegriffen werden. Auch das ndern eines
Elements ist mglich, indem explizit der bergeordnete Bereich
angegeben wird. Die Elemente sind jedoch nicht Teil des
untergeordneten Bereichs.
Ein untergeordneter Bereich wird mit einem bestimmten Satz von
Elementen erstellt. In der Regel schliet er alle Aliase ein, die
mit der Option "AllScope" angegeben wurden. Diese Option wird
spter in diesem Thema erlutert. Er schliet alle Variablen ein,
fr die die Option "AllScope" angegeben wurde, sowie einige
Variablen, mit denen der Bereich angepasst werden kann, z. B.
"MaximumFunctionCount".
Zum Ermitteln der Elemente in einem bestimmten Bereich knnen Sie
den Scope-Parameter von "Get-Variable" oder "Get-Alias" verwenden.
Um z. B. alle Variablen im lokalen Bereich abzurufen, geben Sie
Folgendes ein:
get-variable -scope local
Um alle Variablen im globalen Bereich abzurufen, geben Sie
Folgendes ein:
get-variable -scope global
Bereichsmodifizierer

Der Bereich einer neuen Variablen, eines Aliases oder einer
Funktion kann mit einem Bereichsmodifizierer angegeben werden. Gltige
Modifiziererwerte sind "Global" und "Script".
Die Syntax zur Angabe eines Bereichsmodifizierers bei einer
Variablen ist:
$[<Bereichsmodifizierer>]:<Name> = <Wert>
Die Syntax zur Angabe eines Bereichsmodifizierers bei einer
Funktion ist:
function [<Bereichsmodifizierer>]:<Name> {<Funktionstext>}
Der Standardbereich fr Skripts ist der Skriptbereich. Der
Standardbereich fr Funktionen und Aliase ist der lokale Bereich,
auch wenn sie in einem Skript definiert werden.


Der folgende Befehl, der keinen Bereichsmodifizierer verwendet,
erstellt eine Variable im aktuellen bzw. im lokalen Bereich:
$a = "eins"

Um die gleiche Variable im globalen Bereich zu erstellen,
verwenden Sie den Bereichsmodifizierer "Global":
$global:a = "eins"
Um die gleiche Variable im Skriptbereich zu erstellen, verwenden
Sie den Bereichsmodifizierer "Script":
$script:a = "eins"
Sie knnen Bereichsmodifizierer auch in Funktionen verwenden. Die
folgende Funktionsdefinition erstellt eine Funktion im globalen
Bereich:
function global:Hallo
{
write-host "Hallo, Welt"
}
Mithilfe von Bereichsmodifizierern knnen Sie auf Variablen in
einem anderen Bereich verweisen. Der folgende Befehl verweist auf
die Variable "$test", zuerst im lokalen Bereich und dann im
globalen Bereich:
$test
$global:test
Die Option "AllScope"

Variablen und Aliase verfgen ber eine Option-Eigenschaft, fr
die der Wert "AllScope" festgelegt werden kann. Elemente, fr die
die AllScope-Eigenschaft angegeben wurde, werden Teil jedes
erstellten untergeordneten Bereichs. Umgekehrt erfolgt jedoch
keine automatische Vererbung in bergeordnete Bereiche.
Ein Element, das ber die AllScope-Eigenschaft verfgt, ist im
untergeordneten Bereich sichtbar und ist auerdem Teil dieses
Bereichs. nderungen an diesem Element in irgendeinem Bereich
wirken sich auf alle Bereiche aus, in denen die Variable
definiert ist.
Verwalten von Bereichen

Mehrere Cmdlets verfgen ber einen Scope-Parameter, mit dem Sie
Elemente in einem bestimmten Bereich abrufen und festlegen
(erstellen und ndern) knnen. Verwenden Sie den folgenden
Befehl, um alle Cmdlets in der Sitzung zu ermitteln, die ber
einen Scope-Parameter verfgen:
get-help * -parameter scope
Um alle Variablen zu ermitteln, die in einem bestimmten Bereich
sichtbar sind, verwenden Sie den Scope-Parameter von
"Get-Variable". Die sichtbaren Parameter schlieen globale
Parameter, Parameter im bergeordneten Bereich und Parameter des
aktuellen Bereichs ein.
Der folgende Befehl ruft z. B. die Variablen ab, die im lokalen
Bereich sichtbar sind:
get-variable -scope local
Um eine Variable in einem bestimmten Bereich zu erstellen,
verwenden Sie einen Bereichsmodifizierer oder den Scope-Parameter
von "Set-Variable". Der folgende Befehl erstellt eine Variable im
globalen Bereich:
new-variable -scope global -name a -value "Eins"
Sie knnen auch den Scope-Parameter der Cmdlets "New-Alias",
"Set-Alias" oder "Get-Alias" verwenden, um den Bereich anzugeben.
Der folgende Befehl erstellt einen Alias im globalen Bereich:
new-alias -scope global -name np -value Notepad.exe
Um die Funktionen in einem bestimmten Bereich abzurufen,
verwenden Sie das Cmdlet "Get-Item", whrend Sie sich im
gewnschten Bereich befinden. Das Cmdlet "Get-Item" verfgt nicht
ber einen Scope-Parameter.
Verwenden der Punktquellnotation zur Bereichsangabe

Skripts und Funktionen unterliegen ebenfalls den Bereichsregeln.
Sie werden in einem bestimmten Bereich erstellt und beeinflussen
nur diesen Bereich, sofern nicht mit einem Cmdlet-Parameter oder
einen Bereichsmodifizierer explizit ein anderer Bereich angegeben
wurde.
Sie knnen ein Skript oder eine Funktion jedoch zum aktuellen Bereich
hinzufgen, indem Sie die Punktquellnotation verwenden. Wenn das
Skript dann im aktuellen Bereich ausgefhrt wird, sind alle
Funktionen, Aliase und Variablen, die das Skript erstellt, im
aktuellen Bereich verfgbar.

Um eine Funktion zum aktuellen Bereich hinzuzufgen, geben Sie im
Funktionsaufruf einen Punkt (.) und ein Leerzeichen vor dem Pfad und
Namen der Funktion ein.
Um beispielsweise das Skript "Beispiel.ps1" im Verzeichnis
"C:\Skripts" im Skriptbereich auszufhren (der Standard fr Skripts),
verwenden Sie den folgenden Befehl:
c:\Skripts\Beispiel.ps1
Um das Skript "Beispiel.ps1" im lokalen Bereich auszufhren,
verwenden Sie folgenden Befehl:
. c:\Skripts.Beispiel.ps1

Wenn Sie eine Funktion oder ein Skript mit dem Aufrufoperator (&)
ausfhren, wird die Funktion bzw. das Skript nicht zum aktuellen
Bereich hinzugefgt. Im folgenden Beispiel wird der
Aufrufoperator verwendet:
& c:\Skripts.Beispiel.ps1
Alle Aliase, Funktionen oder Variablen, die das Skript
"Beispiel.ps1" erstellt, sind dabei im aktuellen Bereich nicht
verfgbar.
Einschrnkungen auerhalb des Bereichskonzepts

Einige Windows PowerShell-Konzepte hneln Bereichsdefinitionen oder
interagieren mit Bereichen. Diese Konzepte knnen ggf. als eigener
Bereich oder als Bereichsverhalten missverstanden werden.
Sitzungen, Module und geschachtelte Eingabeaufforderungen stellen
in sich abgeschlossene Umgebungen dar, sie sind aber keine
untergeordneten Bereiche des globalen Bereichs in der Sitzung.
Sitzungen:
Eine Sitzung ist eine Umgebung, in der Windows PowerShell
ausgefhrt wird.
Wenn Sie eine Sitzung auf einem Remotecomputer erstellen,
stellt Windows PowerShell eine dauerhafte Verbindung mit dem
Remotecomputer her. Aufgrund der dauerhaften Verbindung
knnen Sie die Sitzung fr mehrere zusammenhngende Befehle
verwenden.

Da eine Sitzung eine in sich geschlossene Umgebung ist,
verfgt sie auch ber einen eigenen Bereich. Eine Sitzung ist
jedoch kein untergeordneter Bereich der Sitzung, in der sie
erstellt wurde. Die Sitzung startet mit einem eigenen
globalen Bereich. Dieser Bereich ist vom globalen Bereich der
Sitzung unabhngig.
Sie knnen untergeordnete Bereiche in der Sitzung erstellen.
Sie knnen z. B. ein Skript ausfhren, wodurch in der Sitzung
ein untergeordneter Bereich erstellt wird.
Module:
Sie knnen ein Windows PowerShell-Modul verwenden, um Windows
PowerShell-Tools freizugeben und bereitzustellen. Ein Modul
ist eine Einheit, die Cmdlets, Skripts, Funktionen,
Variablen, Aliase und andere ntzliche Elemente enthalten
kann. Sofern dies nicht explizit anders definiert wurde, sind
die Elemente in einem Modul auerhalb des Moduls nicht
verfgbar. Deshalb knnen Sie das Modul zu einer Sitzung
hinzufgen und die ffentlichen Elemente verwenden, ohne dass
Gefahr besteht, dass die anderen Elemente die Cmdlets,
Skripts, Funktionen und anderen Elemente in der Sitzung
berschreiben.
Diese private Einschrnkung eines Moduls hnelt einem
Bereich, aber das Hinzufgen eines Moduls zu einer Sitzung
ndert den Bereich nicht. Auerdem verfgen Module nicht ber
einen eigenen Bereich, obwohl die Skripts in einem Modul, wie
alle Windows PowerShell-Skripts, in einem eigenen Bereich
ausgefhrt werden.
Geschachtelte Eingabeaufforderungen:
Auch geschachtelte Eingabeaufforderungen verfgen nicht ber einen
eigenen Bereich. Wenn Sie eine geschachtelte Eingabeaufforderung
ffnen, ist die geschachtelte Eingabeaufforderung eine Untermenge der
Umgebung. Aber, Sie bleiben innerhalb des lokalen Bereichs.
Skripts haben ihren eigenen Bereich. Wenn Sie ein Skript
debuggen und Sie einen Haltepunkt im Skript erreichen,
arbeiten Sie innerhalb des Skriptbereichs.
Option "Private":
Aliase und Variablen verfgen ber eine Option-Eigenschaft,
fr die der Wert "Private" festgelegt werden kann. Elemente,
fr die die Option "Private" angegeben wurde, knnen in dem
Bereich angezeigt und gendert werden, in dem sie erstellt
wurden. Auerhalb des Bereichs ist kein Zugriff auf diese
Elemente mglich.
Wenn Sie z. B. im globalen Bereich eine Variable mit der
Option "Private" erstellen und dann ein Skript ausfhren,
wird die private Variable bei Get-Variable-Befehlen nicht
angezeigt. Dies gilt auch, wenn Sie den Bereichsmodifizierer
"Global" verwenden.

Sie knnen den Option-Parameter der Cmdlets "New-Variable",
"Set-Variable", "New-Alias" und "Set-Alias" verwenden, um fr
die Option-Eigenschaft den Wert "Private" festzulegen.
Sichtbarkeit:
Die Visibility-Eigenschaft einer Variablen oder eines Alias
bestimmt, ob Sie das Element auerhalb seines Containers
sehen knnen, z. B. auerhalb des Moduls, in dem das Element
erstellt wurde. Die Sichtbarkeit erfllt bei Containern
dieselbe Funktion wie der Private-Wert der Option-Eigenschaft
bei Bereichen.
Die Visibility-Eigenschaft kann den Wert "Public" oder
"Private" haben. Elemente mit der Sichtbarkeit "Private"
knnen nur in dem Container angezeigt und gendert werden, in
dem sie erstellt wurden. Wenn der Container hinzugefgt oder
importiert wird, knnen Elemente mit der Sichtbarkeit
"Private" nicht angezeigt oder gendert werden.
Da die Sichtbarkeit fr Container entworfen wurde, hat sie andere
Auswirkungen auf die Verfgbarkeit innerhalb von Bereichen. Wenn Sie
im globalen Bereich ein Element mit der Sichtbarkeit "Private"
erstellen, kann das Element in keinem Bereich angezeigt oder gendert
werden. Wenn Sie versuchen, den Wert einer Variablen anzuzeigen oder
zu ndern, die mit der Sichtbarkeit "Private" definiert wurde, gibt
Windows PowerShell eine Fehlermeldung zurck.
Mit den Cmdlets "New-Variable" und "Set-Variable" knnen Sie
eine Variable mit der Sichtbarkeit "Private" erstellen.

BEISPIELE
Beispiel 1: ndern eines Variablenwerts ausschlielich in einem Skript
Der folgende Befehl ndert den Wert der Variablen
"$ConfirmPreference" in einem Skript. Die nderung wirkt sich
nicht auf den globalen Bereich aus.

Verwenden Sie zunchst den folgenden Befehl, um den Wert der
$ConfirmPreference-Variable im lokalen Bereich anzuzeigen:
C:\PS> $ConfirmPreference
High
Erstellen Sie ein Skript "Bereich.ps1", das die folgenden
Befehle enthlt:
$ConfirmPreference = "Low"
"Der Wert von `$ConfirmPreference ist $ConfirmPreference."
Fhren Sie das Skript aus. Das Skript ndert den Wert der
Variablen "$ConfirmPreference" und gibt anschlieend den Wert
im Skriptbereich aus. Die Ausgabe sollte folgendem Beispiel
entsprechen:
Der Wert von $ConfirmPreference ist Low.

Testen Sie anschlieend den aktuellen Wert der Variablen
"$ConfirmPreference" im aktuellen Bereich.
C:\PS> $ConfirmPreference
High

Dieses Beispiel zeigt, dass nderungen eines Variablenwerts im
Skriptbereich keinen Einfluss auf den Wert dieser Variablen im
bergeordneten Bereich haben.
Beispiel 2: Anzeigen eines Variablenwerts in unterschiedlichen Bereichen

Mit Bereichsmodifizierern knnen Sie den Wert einer Variablen
im lokalen und in einem bergeordneten Bereich anzeigen.
Definieren Sie zuerst eine Variable "$test" im globalen Bereich.
$test = "Global"
Erstellen Sie danach ein Skript "Beispiel.ps1", das die
Variable "$test" definiert. Verwenden Sie im Skript einen
Bereichsmodifizierer, um auf die globale oder auf die lokale
Version der Variablen "$test" zu verweisen.
# In Beispiel.ps1
$test = "Local"
"Der lokale Wert von `$test ist $test."
"Der globale Wert von `$test ist $global:test."

Wenn Sie "Beispiel.ps1" ausfhren, sollten Sie folgende Ausgabe
erhalten:

Der lokale Wert von $test ist Local.
Der globale Wert von $test ist Global.
Nach der Ausfhrung des Skripts ist in der Sitzung nur der
globale Wert von "$test" definiert.
C:\PS> $test
Global
Beispiel 3: ndern des Werts einer Variablen in einem
bergeordneten Bereich
Sofern ein Element nicht mit der Option "Private" oder einer
anderen Methode geschtzt wurde, knnen Sie den Wert einer
Variablen in einem bergeordneten Bereich anzeigen und ndern.
Definieren Sie zuerst eine Variable "$test" im globalen Bereich.
$test = "Global"
Erstellen Sie danach ein Skript "Beispiel.ps1", das die
Variable "$test" definiert. Verwenden Sie im Skript einen
Bereichsmodifizierer, um auf die globale oder auf die lokale
Version der Variablen "$test" zu verweisen.
# In Beispiel.ps1
$global:test = "Local"
"Der globale Wert von `$test ist $global:test."

Nach der Ausfhrung des Skripts hat sich der globale Wert von
"$test" gendert.
C:\PS> $test
Local

Beispiel 4: Erstellen einer privaten Variablen
Eine private Variable ist eine Variable, fr die in der
Option-Eigenschaft der Wert "Private" angegeben wurde. Private
Variablen werden vom untergeordneten Bereich geerbt, aber sie
knnen nur in dem Bereich angezeigt oder gendert werden, in
dem sie erstellt wurden.
Der folgende Befehl erstellt im lokalen Bereich eine private
Variable mit dem Namen "$ptest".
new-variable -name ptest -value 1 -option private
Sie knnen den Wert von "$ptest" im lokalen Bereich anzeigen
und ndern.
C:\PS> $ptest
1
C:\PS> $ptest = 2
C:\PS> $ptest
2


Erstellen Sie nun ein Skript "Beispiel.ps1", das die folgenden
Befehle enthlt.
Der Befehl versucht, den Wert von "$ptest" anzuzeigen und zu
ndern.
# In Beispiel.ps1
"Der Wert von `$Ptest ist $Ptest."
"Der Wert von `$Ptest ist $global:Ptest."

Da die Variable "$ptest" im Skriptbereich nicht sichtbar ist,
ist die Ausgabe leer.

"Der Wert von $Ptest ist ."
"Der Wert von $Ptest ist ."


SIEHE AUCH
about_Variables
about_Environment_Variables
about_Functions
about_Script_Blocks