Erklärt den Begriff des Bereichs in Windows PowerShell und zeigt, (about_scopes)
# THEMA
about_Scopes
# KURZBESCHREIBUNG
Erklärt den Begriff des Bereichs in Windows PowerShell und zeigt,
wie der Bereich von Elementen festgelegt oder geändert werden kann.
# DETAILBESCHREIBUNG
Windows PowerShell schützt den Zugriff auf Variablen, Aliase,
Funktionen und Windows PowerShell-Laufwerke (PSDrives), indem die
Bereiche eingeschränkt werden, in denen diese Elemente gelesen
oder geändert werden können. Windows PowerShell erzwingt einige
wenige, einfache Bereichsregeln, um sicherzustellen, dass
Elemente nicht ungewollt geändert werden.
Für Bereiche gelten die folgenden Grundregeln:
- Ein Element, das Sie in einen Bereich einschließen, 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 können 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 geändert werden, in dem es
erstellt wurde, außer 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 ursprüngliche Element durch das neue
Element ausgeblendet und ist nicht mehr zugänglich. Es wird
jedoch nicht überschrieben oder geändert.
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 gültig
ist. Variablen und Funktionen, die bereits beim Start von
Windows PowerShell verfügbar sind, werden im globalen Bereich
erstellt. Dieser Bereich schließt 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, während eine Skriptdatei
ausgeführt wird. Nur die Befehle innerhalb des Skripts werden
im Skriptbereich ausgeführt. Für die Befehle in einem Skript
stellt der Skriptbereich den lokalen Bereich dar.
Privat:
Elemente in einem privaten Bereich sind außerhalb des aktuel-
len Bereichs nicht sichtbar. Sie können den privaten Bereich
verwenden, um in einem anderen Bereich eine private Version
eines Elements zu erstellen, das den gleichen Namen aufweist.
Nummerierte Bereiche:
Sie können 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 können durch das Ausführen 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 ursprüngliche Bereich) und
einen untergeordneten Bereich (der neu erstellte Bereich).
In Windows PowerShell sind alle Bereiche untergeordnete Bereiche
des globalen Bereichs, aber Sie können viele Bereiche und viele
rekursive Bereiche erstellen.
Sofern Sie Elemente nicht explizit als privat definieren, sind
Elemente des übergeordneten Bereichs auch im untergeordneten
Bereich verfügbar. 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 möglich, 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 schließt er alle Aliase ein, die
mit der Option "AllScope" angegeben wurden. Diese Option wird
später in diesem Thema erläutert. Er schließt alle Variablen ein,
für 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 können 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. Gültige
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 für Skripts ist der Skriptbereich. Der
Standardbereich für 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 können Bereichsmodifizierer auch in Funktionen verwenden. Die
folgende Funktionsdefinition erstellt eine Funktion im globalen
Bereich:
function global:Hallo
{
write-host "Hallo, Welt"
}
Mithilfe von Bereichsmodifizierern können 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 verfügen über eine Option-Eigenschaft, für
die der Wert "AllScope" festgelegt werden kann. Elemente, für 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 verfügt, ist im
untergeordneten Bereich sichtbar und ist außerdem 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 verfügen über einen Scope-Parameter, mit dem Sie
Elemente in einem bestimmten Bereich abrufen und festlegen
(erstellen und ändern) können. Verwenden Sie den folgenden
Befehl, um alle Cmdlets in der Sitzung zu ermitteln, die über
einen Scope-Parameter verfügen:
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 schließen 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 können 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", während Sie sich im
gewünschten Bereich befinden. Das Cmdlet "Get-Item" verfügt 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 können ein Skript oder eine Funktion jedoch zum aktuellen Bereich
hinzufügen, indem Sie die Punktquellnotation verwenden. Wenn das
Skript dann im aktuellen Bereich ausgeführt wird, sind alle
Funktionen, Aliase und Variablen, die das Skript erstellt, im
aktuellen Bereich verfügbar.
Um eine Funktion zum aktuellen Bereich hinzuzufügen, 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 auszuführen (der Standard für Skripts),
verwenden Sie den folgenden Befehl:
c:\Skripts\Beispiel.ps1
Um das Skript "Beispiel.ps1" im lokalen Bereich auszuführen,
verwenden Sie folgenden Befehl:
. c:\Skripts.Beispiel.ps1
Wenn Sie eine Funktion oder ein Skript mit dem Aufrufoperator (&)
ausführen, wird die Funktion bzw. das Skript nicht zum aktuellen
Bereich hinzugefügt. 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
verfügbar.
Einschränkungen außerhalb des Bereichskonzepts
Einige Windows PowerShell-Konzepte ähneln Bereichsdefinitionen oder
interagieren mit Bereichen. Diese Konzepte können 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
ausgeführt wird.
Wenn Sie eine Sitzung auf einem Remotecomputer erstellen,
stellt Windows PowerShell eine dauerhafte Verbindung mit dem
Remotecomputer her. Aufgrund der dauerhaften Verbindung
können Sie die Sitzung für mehrere zusammenhängende Befehle
verwenden.
Da eine Sitzung eine in sich geschlossene Umgebung ist,
verfügt 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 unabhängig.
Sie können untergeordnete Bereiche in der Sitzung erstellen.
Sie können z. B. ein Skript ausführen, wodurch in der Sitzung
ein untergeordneter Bereich erstellt wird.
Module:
Sie können 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 nützliche Elemente enthalten
kann. Sofern dies nicht explizit anders definiert wurde, sind
die Elemente in einem Modul außerhalb des Moduls nicht
verfügbar. Deshalb können Sie das Modul zu einer Sitzung
hinzufügen 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 Einschränkung eines Moduls ähnelt einem
Bereich, aber das Hinzufügen eines Moduls zu einer Sitzung
ändert den Bereich nicht. Außerdem verfügen Module nicht über
einen eigenen Bereich, obwohl die Skripts in einem Modul, wie
alle Windows PowerShell-Skripts, in einem eigenen Bereich
ausgeführt werden.
Geschachtelte Eingabeaufforderungen:
Auch geschachtelte Eingabeaufforderungen verfügen 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 verfügen über eine Option-Eigenschaft,
für die der Wert "Private" festgelegt werden kann. Elemente,
für die die Option "Private" angegeben wurde, können in dem
Bereich angezeigt und geändert werden, in dem sie erstellt
wurden. Außerhalb des Bereichs ist kein Zugriff auf diese
Elemente möglich.
Wenn Sie z. B. im globalen Bereich eine Variable mit der
Option "Private" erstellen und dann ein Skript ausführen,
wird die private Variable bei Get-Variable-Befehlen nicht
angezeigt. Dies gilt auch, wenn Sie den Bereichsmodifizierer
"Global" verwenden.
Sie können den Option-Parameter der Cmdlets "New-Variable",
"Set-Variable", "New-Alias" und "Set-Alias" verwenden, um für
die Option-Eigenschaft den Wert "Private" festzulegen.
Sichtbarkeit:
Die Visibility-Eigenschaft einer Variablen oder eines Alias
bestimmt, ob Sie das Element außerhalb seines Containers
sehen können, z. B. außerhalb des Moduls, in dem das Element
erstellt wurde. Die Sichtbarkeit erfüllt 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"
können nur in dem Container angezeigt und geändert werden, in
dem sie erstellt wurden. Wenn der Container hinzugefügt oder
importiert wird, können Elemente mit der Sichtbarkeit
"Private" nicht angezeigt oder geändert werden.
Da die Sichtbarkeit für Container entworfen wurde, hat sie andere
Auswirkungen auf die Verfügbarkeit innerhalb von Bereichen. Wenn Sie
im globalen Bereich ein Element mit der Sichtbarkeit "Private"
erstellen, kann das Element in keinem Bereich angezeigt oder geändert
werden. Wenn Sie versuchen, den Wert einer Variablen anzuzeigen oder
zu ändern, die mit der Sichtbarkeit "Private" definiert wurde, gibt
Windows PowerShell eine Fehlermeldung zurück.
Mit den Cmdlets "New-Variable" und "Set-Variable" können Sie
eine Variable mit der Sichtbarkeit "Private" erstellen.
BEISPIELE
Beispiel 1: Ändern eines Variablenwerts ausschließlich 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 zunächst 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 enthält:
$ConfirmPreference = "Low"
"Der Wert von `$ConfirmPreference ist $ConfirmPreference."
Führen Sie das Skript aus. Das Skript ändert den Wert der
Variablen "$ConfirmPreference" und gibt anschließend den Wert
im Skriptbereich aus. Die Ausgabe sollte folgendem Beispiel
entsprechen:
Der Wert von $ConfirmPreference ist Low.
Testen Sie anschließend 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 können 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" ausführen, sollten Sie folgende Ausgabe
erhalten:
Der lokale Wert von $test ist Local.
Der globale Wert von $test ist Global.
Nach der Ausführung 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 geschützt wurde, können 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 Ausführung des Skripts hat sich der globale Wert von
"$test" geändert.
C:\PS> $test
Local
Beispiel 4: Erstellen einer privaten Variablen
Eine private Variable ist eine Variable, für die in der
Option-Eigenschaft der Wert "Private" angegeben wurde. Private
Variablen werden vom untergeordneten Bereich geerbt, aber sie
können nur in dem Bereich angezeigt oder geändert 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 können 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 enthält.
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
C:\Windows>powershell get-help about_scripts -full
ColorConsole [Version 1.7.1000] PowerShell 2.0-Export
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2014 Microsoft Corporation.
about_Scopes
# KURZBESCHREIBUNG
Erklärt den Begriff des Bereichs in Windows PowerShell und zeigt,
wie der Bereich von Elementen festgelegt oder geändert werden kann.
# DETAILBESCHREIBUNG
Windows PowerShell schützt den Zugriff auf Variablen, Aliase,
Funktionen und Windows PowerShell-Laufwerke (PSDrives), indem die
Bereiche eingeschränkt werden, in denen diese Elemente gelesen
oder geändert werden können. Windows PowerShell erzwingt einige
wenige, einfache Bereichsregeln, um sicherzustellen, dass
Elemente nicht ungewollt geändert werden.
Für Bereiche gelten die folgenden Grundregeln:
- Ein Element, das Sie in einen Bereich einschließen, 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 können 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 geändert werden, in dem es
erstellt wurde, außer 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 ursprüngliche Element durch das neue
Element ausgeblendet und ist nicht mehr zugänglich. Es wird
jedoch nicht überschrieben oder geändert.
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 gültig
ist. Variablen und Funktionen, die bereits beim Start von
Windows PowerShell verfügbar sind, werden im globalen Bereich
erstellt. Dieser Bereich schließt 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, während eine Skriptdatei
ausgeführt wird. Nur die Befehle innerhalb des Skripts werden
im Skriptbereich ausgeführt. Für die Befehle in einem Skript
stellt der Skriptbereich den lokalen Bereich dar.
Privat:
Elemente in einem privaten Bereich sind außerhalb des aktuel-
len Bereichs nicht sichtbar. Sie können den privaten Bereich
verwenden, um in einem anderen Bereich eine private Version
eines Elements zu erstellen, das den gleichen Namen aufweist.
Nummerierte Bereiche:
Sie können 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 können durch das Ausführen 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 ursprüngliche Bereich) und
einen untergeordneten Bereich (der neu erstellte Bereich).
In Windows PowerShell sind alle Bereiche untergeordnete Bereiche
des globalen Bereichs, aber Sie können viele Bereiche und viele
rekursive Bereiche erstellen.
Sofern Sie Elemente nicht explizit als privat definieren, sind
Elemente des übergeordneten Bereichs auch im untergeordneten
Bereich verfügbar. 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 möglich, 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 schließt er alle Aliase ein, die
mit der Option "AllScope" angegeben wurden. Diese Option wird
später in diesem Thema erläutert. Er schließt alle Variablen ein,
für 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 können 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. Gültige
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 für Skripts ist der Skriptbereich. Der
Standardbereich für 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 können Bereichsmodifizierer auch in Funktionen verwenden. Die
folgende Funktionsdefinition erstellt eine Funktion im globalen
Bereich:
function global:Hallo
{
write-host "Hallo, Welt"
}
Mithilfe von Bereichsmodifizierern können 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 verfügen über eine Option-Eigenschaft, für
die der Wert "AllScope" festgelegt werden kann. Elemente, für 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 verfügt, ist im
untergeordneten Bereich sichtbar und ist außerdem 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 verfügen über einen Scope-Parameter, mit dem Sie
Elemente in einem bestimmten Bereich abrufen und festlegen
(erstellen und ändern) können. Verwenden Sie den folgenden
Befehl, um alle Cmdlets in der Sitzung zu ermitteln, die über
einen Scope-Parameter verfügen:
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 schließen 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 können 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", während Sie sich im
gewünschten Bereich befinden. Das Cmdlet "Get-Item" verfügt 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 können ein Skript oder eine Funktion jedoch zum aktuellen Bereich
hinzufügen, indem Sie die Punktquellnotation verwenden. Wenn das
Skript dann im aktuellen Bereich ausgeführt wird, sind alle
Funktionen, Aliase und Variablen, die das Skript erstellt, im
aktuellen Bereich verfügbar.
Um eine Funktion zum aktuellen Bereich hinzuzufügen, 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 auszuführen (der Standard für Skripts),
verwenden Sie den folgenden Befehl:
c:\Skripts\Beispiel.ps1
Um das Skript "Beispiel.ps1" im lokalen Bereich auszuführen,
verwenden Sie folgenden Befehl:
. c:\Skripts.Beispiel.ps1
Wenn Sie eine Funktion oder ein Skript mit dem Aufrufoperator (&)
ausführen, wird die Funktion bzw. das Skript nicht zum aktuellen
Bereich hinzugefügt. 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
verfügbar.
Einschränkungen außerhalb des Bereichskonzepts
Einige Windows PowerShell-Konzepte ähneln Bereichsdefinitionen oder
interagieren mit Bereichen. Diese Konzepte können 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
ausgeführt wird.
Wenn Sie eine Sitzung auf einem Remotecomputer erstellen,
stellt Windows PowerShell eine dauerhafte Verbindung mit dem
Remotecomputer her. Aufgrund der dauerhaften Verbindung
können Sie die Sitzung für mehrere zusammenhängende Befehle
verwenden.
Da eine Sitzung eine in sich geschlossene Umgebung ist,
verfügt 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 unabhängig.
Sie können untergeordnete Bereiche in der Sitzung erstellen.
Sie können z. B. ein Skript ausführen, wodurch in der Sitzung
ein untergeordneter Bereich erstellt wird.
Module:
Sie können 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 nützliche Elemente enthalten
kann. Sofern dies nicht explizit anders definiert wurde, sind
die Elemente in einem Modul außerhalb des Moduls nicht
verfügbar. Deshalb können Sie das Modul zu einer Sitzung
hinzufügen 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 Einschränkung eines Moduls ähnelt einem
Bereich, aber das Hinzufügen eines Moduls zu einer Sitzung
ändert den Bereich nicht. Außerdem verfügen Module nicht über
einen eigenen Bereich, obwohl die Skripts in einem Modul, wie
alle Windows PowerShell-Skripts, in einem eigenen Bereich
ausgeführt werden.
Geschachtelte Eingabeaufforderungen:
Auch geschachtelte Eingabeaufforderungen verfügen 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 verfügen über eine Option-Eigenschaft,
für die der Wert "Private" festgelegt werden kann. Elemente,
für die die Option "Private" angegeben wurde, können in dem
Bereich angezeigt und geändert werden, in dem sie erstellt
wurden. Außerhalb des Bereichs ist kein Zugriff auf diese
Elemente möglich.
Wenn Sie z. B. im globalen Bereich eine Variable mit der
Option "Private" erstellen und dann ein Skript ausführen,
wird die private Variable bei Get-Variable-Befehlen nicht
angezeigt. Dies gilt auch, wenn Sie den Bereichsmodifizierer
"Global" verwenden.
Sie können den Option-Parameter der Cmdlets "New-Variable",
"Set-Variable", "New-Alias" und "Set-Alias" verwenden, um für
die Option-Eigenschaft den Wert "Private" festzulegen.
Sichtbarkeit:
Die Visibility-Eigenschaft einer Variablen oder eines Alias
bestimmt, ob Sie das Element außerhalb seines Containers
sehen können, z. B. außerhalb des Moduls, in dem das Element
erstellt wurde. Die Sichtbarkeit erfüllt 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"
können nur in dem Container angezeigt und geändert werden, in
dem sie erstellt wurden. Wenn der Container hinzugefügt oder
importiert wird, können Elemente mit der Sichtbarkeit
"Private" nicht angezeigt oder geändert werden.
Da die Sichtbarkeit für Container entworfen wurde, hat sie andere
Auswirkungen auf die Verfügbarkeit innerhalb von Bereichen. Wenn Sie
im globalen Bereich ein Element mit der Sichtbarkeit "Private"
erstellen, kann das Element in keinem Bereich angezeigt oder geändert
werden. Wenn Sie versuchen, den Wert einer Variablen anzuzeigen oder
zu ändern, die mit der Sichtbarkeit "Private" definiert wurde, gibt
Windows PowerShell eine Fehlermeldung zurück.
Mit den Cmdlets "New-Variable" und "Set-Variable" können Sie
eine Variable mit der Sichtbarkeit "Private" erstellen.
BEISPIELE
Beispiel 1: Ändern eines Variablenwerts ausschließlich 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 zunächst 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 enthält:
$ConfirmPreference = "Low"
"Der Wert von `$ConfirmPreference ist $ConfirmPreference."
Führen Sie das Skript aus. Das Skript ändert den Wert der
Variablen "$ConfirmPreference" und gibt anschließend den Wert
im Skriptbereich aus. Die Ausgabe sollte folgendem Beispiel
entsprechen:
Der Wert von $ConfirmPreference ist Low.
Testen Sie anschließend 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 können 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" ausführen, sollten Sie folgende Ausgabe
erhalten:
Der lokale Wert von $test ist Local.
Der globale Wert von $test ist Global.
Nach der Ausführung 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 geschützt wurde, können 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 Ausführung des Skripts hat sich der globale Wert von
"$test" geändert.
C:\PS> $test
Local
Beispiel 4: Erstellen einer privaten Variablen
Eine private Variable ist eine Variable, für die in der
Option-Eigenschaft der Wert "Private" angegeben wurde. Private
Variablen werden vom untergeordneten Bereich geerbt, aber sie
können nur in dem Bereich angezeigt oder geändert 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 können 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 enthält.
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
C:\Windows>powershell get-help about_scripts -full
ColorConsole [Version 1.7.1000] PowerShell 2.0-Export
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2014 Microsoft Corporation.