about_Scopes
Kurze Beschreibung
Erläutert das Konzept des Bereichs in PowerShell und zeigt, wie der Bereich von Elementen festgelegt und geändert werden kann.
Lange Beschreibung
PowerShell schützt den Zugriff auf Variablen, Aliase, Funktionen und PowerShell-Laufwerke (PSDrives), indem es einschränkt, wo sie gelesen und geändert werden können. PowerShell verwendet Bereichsregeln, um sicherzustellen, dass Sie ein Element, das nicht geändert werden soll, nicht versehentlich ändern.
Im Folgenden sind die grundlegenden Regeln des Geltungsbereichs aufgeführt:
Bereiche können geschachtelt werden. Ein äußerer Bereich wird als übergeordneter Bereich bezeichnet. Alle geschachtelten Bereiche sind untergeordnete Bereiche dieses übergeordneten Elements.
Ein Element ist in dem Bereich sichtbar, in dem es in und in allen untergeordneten Bereichen erstellt wurde, es sei denn, Sie machen es explizit privat.
Sie können Variablen, Aliase, Funktionen und PowerShell-Laufwerke für einen Bereich außerhalb des aktuellen Bereichs deklarieren.
Ein Element, das Sie in einem Bereich erstellt haben, kann nur in dem Bereich geändert werden, in dem es erstellt wurde, es sei denn, Sie geben explizit einen anderen Bereich an.
Wenn Sie ein Element in einem Bereich erstellen und das Element seinen Namen mit einem Element in einem anderen Bereich teilt, wird das ursprüngliche Element möglicherweise durch das neue Element ausgeblendet, aber es wird nicht überschrieben oder geändert.
PowerShell-Bereiche
PowerShell unterstützt die folgenden Gültigkeitsbereiche:
- Global: Der Bereich, der wirksam ist, wenn PowerShell gestartet wird oder wenn Sie eine neue Sitzung oder einen neuen Runspace erstellen. Variablen und Funktionen, die beim Starten von PowerShell vorhanden sind, wurden im globalen Bereich erstellt, z. B. automatische Variablen und Einstellungsvariablen. Die Variablen, Aliase und Funktionen in Ihren PowerShell-Profilen werden auch im globalen Bereich erstellt. Der globale Bereich ist der übergeordnete Stammbereich in einer Sitzung.
- Lokal: Der aktuelle Bereich. Der lokale Bereich kann der globale Oder ein beliebiger anderer Bereich sein.
- Skript: Der Bereich, der erstellt wird, während eine Skriptdatei ausgeführt wird. Nur die Befehle im Skript werden im Skriptbereich ausgeführt. Für die Befehle in einem Skript ist der Skriptbereich der lokale Bereich.
Übergeordnete und untergeordnete Bereiche
Sie können einen neuen untergeordneten Bereich erstellen, indem Sie ein Skript oder eine Funktion aufrufen. Der aufrufende Bereich ist der übergeordnete Bereich. Das aufgerufene Skript oder die aufgerufene Funktion ist der untergeordnete Bereich. Die von Ihnen aufgerufenen Funktionen oder Skripts können andere Funktionen aufrufen und eine Hierarchie von untergeordneten Bereichen erstellen, deren Stammbereich der globale Bereich ist.
Sofern Sie die Elemente nicht explizit privat festlegen, sind die Elemente im übergeordneten Bereich für den untergeordneten Bereich verfügbar. Elemente, die Sie im untergeordneten Bereich erstellen und ändern, wirken sich jedoch nicht auf den übergeordneten Bereich aus, es sei denn, Sie geben den Bereich beim Erstellen der Elemente explizit an.
Hinweis
Funktionen aus einem Modul werden nicht in einem untergeordneten Bereich des aufrufenden Bereichs ausgeführt. Module verfügen über einen eigenen Sitzungsstatus, der mit dem globalen Bereich verknüpft ist. Der gesamte Modulcode wird in einer modulspezifischen Hierarchie von Bereichen ausgeführt, die über einen eigenen Stammbereich verfügen.
Vererbung
Ein untergeordneter Bereich erbt nicht die Variablen, Aliase und Funktionen aus dem übergeordneten Bereich. Sofern ein Element nicht privat ist, kann der untergeordnete Bereich die Elemente im übergeordneten Bereich anzeigen. Außerdem können die Elemente durch explizite Angabe des übergeordneten Bereichs geändert werden, aber die Elemente sind nicht Teil des untergeordneten Bereichs.
Ein untergeordneter Bereich wird jedoch mit einer Gruppe von Elementen erstellt. In der Regel enthält es alle Aliase, die über die Option AllScope verfügen. Diese Option wird weiter unten in diesem Artikel erläutert. Es enthält alle Variablen mit der Option AllScope sowie einige automatische Variablen.
Um die Elemente in einem bestimmten Bereich zu suchen, verwenden Sie den Scope-Parameter von Get-Variable
oder Get-Alias
.
Geben Sie beispielsweise Folgendes ein, um alle Variablen im lokalen Bereich abzurufen:
Get-Variable -Scope local
Geben Sie Folgendes ein, um alle Variablen im globalen Bereich abzurufen:
Get-Variable -Scope global
Bereichsmodifizierer
Ein Variablen-, Alias- oder Funktionsname kann einen der folgenden optionalen Bereichsmodifizierer enthalten:
global:
– Gibt an, dass der Name im globalen Bereich vorhanden ist.local:
– Gibt an, dass der Name im Lokalen Bereich vorhanden ist. Der aktuelle Bereich ist immer der Lokale Bereich.private:
– Gibt an, dass der Name Privat ist und nur für den aktuellen Bereich sichtbar ist.Hinweis
private
ist kein Bereich. Dies ist eine Option , die die Sichtbarkeit eines Elements außerhalb des Bereichs ändert, in dem das Element definiert ist.script:
– Gibt an, dass der Name im Skriptbereich vorhanden ist. Der Skriptbereich ist der nächstgelegene Bereich der Vorgängerskriptdatei oder Global , wenn keine nächste Vorgängerskriptdatei vorhanden ist.using:
– Wird verwendet, um auf Variablen zuzugreifen, die in einem anderen Bereich definiert sind, während Skripts über Cmdlets wieStart-Job
undInvoke-Command
ausgeführt werden.workflow:
– Gibt an, dass der Name in einem Workflow vorhanden ist. Hinweis: Workflows werden in PowerShell v6 und höher nicht unterstützt.<variable-namespace>
– Ein Von einem PowerShell-PSDrive-Anbieter erstelltes Modifizierer. Zum Beispiel:Namespace BESCHREIBUNG Alias:
Im aktuellen Bereich definierte Aliase Env:
Umgebungsvariablen, die im aktuellen Bereich definiert sind Function:
Im aktuellen Bereich definierte Funktionen Variable:
Variablen, die im aktuellen Bereich definiert sind
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 sind.
Verwenden von Bereichsmodifizierern
Verwenden Sie einen Bereichsmodifizierer, um den Bereich einer neuen Variablen, eines neuen Alias oder einer neuen Funktion anzugeben.
Die Syntax für einen Bereichsmodifizierer in einer Variablen lautet:
$[<scope-modifier>:]<name> = <value>
Die Syntax für einen Bereichsmodifizierer in einer Funktion lautet:
function [<scope-modifier>:]<name> {<function-body>}
Der folgende Befehl, der keinen Bereichsmodifizierer verwendet, erstellt eine Variable im aktuellen oder lokalen Bereich:
$a = "one"
Verwenden Sie den Bereichsmodifiziererglobal:
, um dieselbe Variable im globalen Bereich zu erstellen:
$global:a = "one"
Get-Variable a | Format-List *
Beachten Sie die Eigenschaftenwerte Sichtbarkeit und Optionen .
Name : a
Description :
Value : one
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {}
Vergleichen Sie dies mit einer privaten Variablen:
$private:pVar = 'Private variable'
Get-Variable pVar | Format-List *
Mithilfe des private
Bereichsmodifizierers wird die Options-Eigenschaft auf Private
festgelegt.
Name : pVar
Description :
Value : Private variable
Visibility : Public
Module :
ModuleName :
Options : Private
Attributes : {}
Verwenden script:
Sie den Bereichsmodifizierer, um dieselbe Variable im Skriptbereich zu erstellen:
$script:a = "one"
Sie können auch einen Bereichsmodifizierer mit Funktionen verwenden. Die folgende Funktionsdefinition erstellt eine Funktion im globalen Bereich:
function global:Hello {
Write-Host "Hello, World"
}
Sie können auch Bereichsmodifizierer verwenden, um auf eine Variable in einem anderen Bereich zu verweisen.
Der folgende Befehl bezieht sich auf die $test
Variable, zuerst im lokalen Bereich und dann im globalen Bereich:
$test
$global:test
Der Bereichsmodifizierer using:
Using ist ein spezieller Bereichsmodifizierer, der eine lokale Variable in einem Remotebefehl identifiziert. Ohne einen Modifizierer erwartet PowerShell, dass Variablen in Remotebefehlen in der Remotesitzung definiert werden.
Der using
Bereichsmodifizierer wird in PowerShell 3.0 eingeführt.
Für alle Skripts oder Befehle, die außerhalb der Sitzung ausgeführt werden, benötigen Sie den using
Bereichsmodifizierer, um Variablenwerte aus dem aufrufenden Sitzungsbereich einzubetten, sodass aus Sitzungscode darauf zugegriffen werden kann. Der using
Bereichsmodifizierer wird in den folgenden Kontexten unterstützt:
- Remote ausgeführte Befehle, die mit
Invoke-Command
der Verwendung der Parameter ComputerName, HostName, SSHConnection oder Session (Remotesitzung) gestartet wurden - Hintergrundaufträge, gestartet mit
Start-Job
(Out-of-Process-Sitzung) - Threadaufträge, gestartet über
Start-ThreadJob
oderForEach-Object -Parallel
(separate Threadsitzung)
Abhängig vom Kontext sind eingebettete Variablenwerte entweder unabhängige Kopien der Daten im Bereich des Aufrufers oder Verweise darauf. In Remote- und Out-of-Process-Sitzungen sind sie immer unabhängige Kopien.
Weitere Informationen finden Sie unter about_Remote_Variables.
In Threadsitzungen werden sie als Verweis übergeben. Dies bedeutet, dass es möglich ist, untergeordnete Bereichsvariablen in einem anderen Thread zu ändern. Zum sicheren Ändern von Variablen ist eine Threadsynchronisierung erforderlich.
Weitere Informationen finden Sie unter:
Serialisierung von Variablenwerten
Remote ausgeführte Befehle und Hintergrundaufträge laufen aus. Out-of-Process-Sitzungen verwenden XML-basierte Serialisierung und Deserialisierung, um die Werte von Variablen über die Prozessgrenzen hinweg verfügbar zu machen. Der Serialisierungsprozess konvertiert Objekte in ein PSObject , das die ursprünglichen Objekteigenschaften, aber nicht die Methoden enthält.
Bei einer begrenzten Gruppe von Typen rehydriert die Deserialisierung Objekte wieder zum ursprünglichen Typ. Das rehydrierte Objekt ist eine Kopie des ursprünglichen Objekts instance. Es verfügt über die Typeigenschaften und -methoden. Bei einfachen Typen, z . B. System.Version, ist die Kopie exakt. Bei komplexen Typen ist die Kopie unvollkommen. Beispielsweise enthalten rehydrierte Zertifikatobjekte den privaten Schlüssel nicht.
Instanzen aller anderen Typen sind PSObject-Instanzen . Die PSTypeNames-Eigenschaft enthält den ursprünglichen Typnamen mit dem Präfix Deserialized, z . B. Deserialized.System.Data.DataTable
Die Option "AllScope"
Variablen und Aliase verfügen über eine Option-Eigenschaft , die den Wert AllScope annehmen kann. Elemente mit der AllScope-Eigenschaft werden Teil aller von Ihnen erstellten untergeordneten Bereiche, obwohl sie nicht rückwirkend von übergeordneten Bereichen geerbt werden.
Ein Element mit der AllScope-Eigenschaft ist im untergeordneten Bereich sichtbar und teil dieses Bereichs. Änderungen am Element in einem beliebigen Bereich wirken sich auf alle Bereiche aus, in denen die Variable definiert ist.
Verwalten des Bereichs
Mehrere Cmdlets verfügen über einen Scope-Parameter , mit dem Sie Elemente in einem bestimmten Bereich abrufen oder festlegen (erstellen und ändern können). Verwenden Sie den folgenden Befehl, um alle Cmdlets in Ihrer Sitzung zu suchen, die über einen Scope-Parameter verfügen:
Get-Help * -Parameter scope
Um die Variablen zu finden, die in einem bestimmten Bereich sichtbar sind, verwenden Sie den Scope
Parameter von Get-Variable
. Die sichtbaren Variablen umfassen globale Variablen, Variablen im übergeordneten Bereich und Variablen im aktuellen Bereich.
Der folgende Befehl ruft beispielsweise 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
. Mit dem folgenden Befehl wird eine Variable im globalen Bereich erstellt:
New-Variable -Scope global -Name a -Value "One"
Sie können auch den Bereichsparameter des New-Alias
Cmdlets , Set-Alias
oder Get-Alias
verwenden, um den Bereich anzugeben. Mit dem folgenden Befehl wird ein Alias im globalen Bereich erstellt:
New-Alias -Scope global -Name np -Value Notepad.exe
Um die Funktionen in einem bestimmten Bereich abzurufen, verwenden Sie das Get-Item
Cmdlet, wenn Sie sich im Bereich befinden. Das Get-Item
Cmdlet verfügt nicht über einen Scope-Parameter .
Hinweis
Für die Cmdlets, die den Scope-Parameter verwenden, können Sie auch auf Bereiche nach Anzahl verweisen. Die Zahl beschreibt die relative Position eines Bereichs zu einem anderen. Bereich 0 stellt den aktuellen oder lokalen Bereich dar. Bereich 1 gibt den unmittelbar übergeordneten Bereich an. Bereich 2 gibt das übergeordnete Element des übergeordneten Bereichs an usw. Nummerierte Bereiche sind nützlich, wenn Sie viele rekursive Bereiche erstellt haben.
Verwenden von Punktquellennotation mit Bereich
Skripts und Funktionen folgen den Regeln des Bereichs. Sie erstellen sie in einem bestimmten Bereich, und sie wirken sich nur auf diesen Bereich aus, es sei denn, Sie verwenden einen Cmdletparameter oder einen Bereichsmodifizierer, um diesen Bereich zu ändern.
Sie können jedoch den Inhalt eines Skripts oder einer Funktion dem aktuellen Bereich mithilfe der Punktquellennotation hinzufügen. Wenn Sie ein Skript oder eine Funktion mit Punktquellnotation ausführen, wird es im aktuellen Bereich ausgeführt. Alle Funktionen, Aliase und Variablen im Skript oder der Funktion werden dem aktuellen Bereich hinzugefügt.
Wenn Sie beispielsweise das Skript aus dem Sample.ps1
C:\Scripts
Verzeichnis im Skriptbereich (Standard für Skripts) ausführen möchten, geben Sie einfach den vollständigen Pfad zur Skriptdatei in der Befehlszeile ein.
c:\scripts\sample.ps1
Eine Skriptdatei muss über eine .ps1
Dateierweiterung verfügen, um ausführbar zu sein. Dateien mit Leerzeichen im Pfad müssen in Anführungszeichen eingeschlossen werden. Wenn Sie versuchen, den in Anführungszeichen angegebenen Pfad auszuführen, zeigt PowerShell den Inhalt der Zeichenfolge in Anführungszeichen anstelle der Ausführung des Skripts an. Mit dem Aufrufoperator (&
) können Sie den Inhalt der Zeichenfolge ausführen, die den Dateinamen enthält.
Mithilfe des Aufrufoperators zum Ausführen einer Funktion oder eines Skripts wird sie im Skriptbereich ausgeführt. Die Verwendung des Aufrufoperators unterscheidet sich nicht von der Ausführung des Skripts nach Name.
& c:\scripts\sample.ps1
Weitere Informationen zum Anrufoperator finden Sie in about_Operators.
Um das Sample.ps1
Skript im lokalen Bereich auszuführen, geben Sie einen Punkt und ein Leerzeichen (.
) vor dem Pfad zum Skript ein:
. c:\scripts\sample.ps1
Nun werden alle im Skript definierten Funktionen, Aliase oder Variablen dem aktuellen Bereich hinzugefügt.
Einschränkung ohne Bereich
PowerShell verfügt über einige Optionen und Features, die dem Bereich ähneln und möglicherweise mit Bereichen interagieren. Diese Funktion kann mit dem Bereich oder dem Verhalten des Bereichs verwechselt werden.
Sitzungen, Module und geschachtelte Eingabeaufforderungen sind eigenständige Umgebungen, keine untergeordneten Bereiche des globalen Bereichs in der Sitzung.
Sitzungen
Eine Sitzung ist eine Umgebung, in der PowerShell ausgeführt wird. Wenn Sie eine Sitzung auf einem Remotecomputer erstellen, stellt PowerShell eine dauerhafte Verbindung mit dem Remotecomputer her. Mit der dauerhaften Verbindung können Sie die Sitzung für mehrere verwandte Befehle verwenden.
Da eine Sitzung eine eigenständige Umgebung ist, verfügt sie über einen eigenen Bereich, aber eine Sitzung ist kein untergeordneter Bereich der Sitzung, in der sie erstellt wurde. Die Sitzung beginnt mit einem eigenen globalen Bereich. Dieser Bereich ist unabhängig vom globalen Bereich der Sitzung. Sie können untergeordnete Bereiche in der Sitzung erstellen. Sie können beispielsweise ein Skript ausführen, um einen untergeordneten Bereich in einer Sitzung zu erstellen.
Module
Sie können ein PowerShell-Modul verwenden, um PowerShell-Tools zu teilen und bereitzustellen. Ein Modul ist eine Einheit, die Cmdlets, Skripts, Funktionen, Variablen, Aliase und andere nützliche Elemente enthalten kann. Sofern nicht explizit definiert, ist der Zugriff auf die Elemente in einem Modul außerhalb des Moduls nicht möglich. Daher können Sie das Modul Ihrer Sitzung hinzufügen und die öffentlichen Elemente verwenden, ohne sich Sorgen zu machen, dass die anderen Elemente die Cmdlets, Skripts, Funktionen und anderen Elemente in Ihrer Sitzung überschreiben könnten.
Module werden standardmäßig in die oberste Ebene des aktuellen Sitzungszustands geladen, nicht in den aktuellen Bereich. Der aktuelle Sitzungsstatus kann ein Modulsitzungsstatus oder der globale Sitzungsstatus sein. Das Hinzufügen eines Moduls zu einer Sitzung ändert den Bereich nicht. Wenn Sie sich im globalen Bereich befinden, werden Module in den globalen Sitzungszustand geladen. Alle Exporte werden in die globalen Tabellen eingefügt.
Wenn Sie Modul2 aus Modul1 laden, wird Modul2 in den Sitzungszustand von Modul1 geladen, nicht in den globalen Sitzungszustand. Alle Exporte aus Modul2 werden am oberen Rand des Modul1-Sitzungszustands platziert. Wenn Sie verwenden Import-Module -Scope local
, werden die Exporte im aktuellen Bereichsobjekt und nicht auf der obersten Ebene platziert. Wenn Sie sich in einem Modul befinden und (oder Import-Module -Global
) verwenden Import-Module -Scope global
, um ein anderes Modul zu laden, werden dieses Modul und seine Exporte in den globalen Sitzungszustand anstelle des lokalen Sitzungszustands des Moduls geladen. Dieses Feature wurde zum Schreiben von Modulen entwickelt, die Module bearbeiten. Das WindowsCompatibility-Modul führt dies aus, um Proxymodule in den globalen Sitzungszustand zu importieren.
Innerhalb des Sitzungszustands verfügen Module über einen eigenen Bereich. Betrachten Sie das folgende Modul C:\temp\mod1.psm1
:
$a = "Hello"
function foo {
"`$a = $a"
"`$global:a = $global:a"
}
Nun erstellen wir eine globale Variable $a
, geben ihr einen Wert und rufen die Funktion foo auf.
$a = "Goodbye"
foo
Das Modul deklariert die Variable $a
im Modulbereich, und die Funktion foo gibt den Wert der Variablen in beiden Bereichen aus.
$a = Hello
$global:a = Goodbye
Geschachtelte Eingabeaufforderungen
Geschachtelte Eingabeaufforderungen verfügen nicht über einen eigenen Bereich. Wenn Sie eine geschachtelte Eingabeaufforderung eingeben, ist die geschachtelte Eingabeaufforderung eine Teilmenge der Umgebung. Sie bleiben jedoch im lokalen Bereich.
Skripts verfügen über einen eigenen Bereich. Wenn Sie ein Skript debuggen und einen Haltepunkt im Skript erreichen, geben Sie den Skriptbereich ein.
Option "Privat"
Aliase und Variablen verfügen über eine Option-Eigenschaft , die den Wert annehmen Private
kann. Elemente, die über die Private
Option verfügen, können im Bereich, in dem sie erstellt werden, angezeigt und geändert werden, aber sie können außerhalb dieses Bereichs nicht angezeigt oder geändert werden.
Wenn Sie beispielsweise eine Variable mit einer privaten Option im globalen Bereich erstellen und dann ein Skript ausführen, Get-Variable
zeigen Befehle im Skript die private Variable nicht an. Wenn Sie den globalen Bereichsmodifizierer in diesem instance verwenden, wird die private Variable nicht angezeigt.
Sie können den Parameter Option der New-Variable
Cmdlets , Set-Variable
, New-Alias
und Set-Alias
verwenden, um den Wert der Option-Eigenschaft auf Private festzulegen.
Sichtbarkeit
Die Visibility-Eigenschaft einer Variablen oder eines Alias bestimmt, ob das Element außerhalb des Containers angezeigt wird, in dem es erstellt wurde. Ein Container kann ein Modul, ein Skript oder ein Snap-In sein. Sichtbarkeit ist für Container auf die gleiche Weise konzipiert wie der Private
Wert der Option-Eigenschaft für Bereiche.
Die Visibility-Eigenschaft akzeptiert die Public
Werte und Private
. Elemente mit privater Sichtbarkeit 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 die Elemente mit privater Sichtbarkeit nicht angezeigt oder geändert werden.
Da sichtbarkeit für Container konzipiert ist, funktioniert sie in einem Bereich unterschiedlich.
- Wenn Sie ein Element mit privater Sichtbarkeit im globalen Bereich erstellen, können Sie das Element in keinem Bereich anzeigen oder ändern.
- Wenn Sie versuchen, den Wert einer Variablen mit privater Sichtbarkeit anzuzeigen oder zu ändern, gibt PowerShell eine Fehlermeldung zurück.
Sie können die New-Variable
Cmdlets und Set-Variable
verwenden, um eine Variable mit privater Sichtbarkeit zu erstellen.
Beispiele
Beispiel 1: Ändern eines Variablenwerts nur in einem Skript
Der folgende Befehl ändert den Wert der $ConfirmPreference
Variablen 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
Variablen im lokalen Bereich anzuzeigen:
PS> $ConfirmPreference
High
Erstellen Sie ein Scope.ps1 Skript, das die folgenden Befehle enthält:
$ConfirmPreference = "Low"
"The value of `$ConfirmPreference is $ConfirmPreference."
Führen Sie das Skript aus. Das Skript ändert den Wert der $ConfirmPreference
Variablen und meldet dann ihren Wert im Skriptbereich. Die Ausgabe sollte der folgenden Ausgabe ähneln:
The value of $ConfirmPreference is Low.
Testen Sie als Nächstes den aktuellen Wert der $ConfirmPreference
Variablen im aktuellen Bereich.
PS> $ConfirmPreference
High
Dieses Beispiel zeigt, dass Änderungen am Wert einer Variablen im Skriptbereich keinen Einfluss auf den Wert der Variablen im übergeordneten Bereich haben.
Beispiel 2: Anzeigen eines Variablenwerts in verschiedenen Bereichen
Sie können Bereichsmodifizierer verwenden, um den Wert einer Variablen im lokalen Bereich und in einem übergeordneten Bereich anzuzeigen.
Definieren Sie zunächst eine $test
Variable im globalen Bereich.
$test = "Global"
Erstellen Sie als Nächstes ein Sample.ps1
Skript, das die $test
Variable definiert. Verwenden Sie im Skript einen Bereichsmodifizierer, um auf die globale oder lokale Version der $test
Variablen zu verweisen.
In Sample.ps1
:
$test = "Local"
"The local value of `$test is $test."
"The global value of `$test is $global:test."
Wenn Sie ausführen Sample.ps1
, sollte die Ausgabe der folgenden Ausgabe ähneln:
The local value of $test is Local.
The global value of $test is Global.
Wenn das Skript abgeschlossen ist, wird nur der globale Wert von $test
in der Sitzung definiert.
PS> $test
Global
Beispiel 3: Ändern des Werts einer Variablen in einem übergeordneten Bereich
Wenn Sie ein Element nicht mithilfe der Option Private oder einer anderen Methode schützen, können Sie den Wert einer Variablen in einem übergeordneten Bereich anzeigen und ändern.
Definieren Sie zunächst eine $test
Variable im globalen Bereich.
$test = "Global"
Erstellen Sie als Nächstes ein Sample.ps1 Skript, das die $test
Variable definiert. Verwenden Sie im Skript einen Bereichsmodifizierer, um auf die globale oder lokale Version der $test
Variablen zu verweisen.
In Sample.ps1:
$global:test = "Local"
"The global value of `$test is $global:test."
Wenn das Skript abgeschlossen ist, wird der globale Wert von $test
geändert.
PS> $test
Local
Beispiel 4: Erstellen einer privaten Variablen
Eine private Variable ist eine Variable, die über eine Option-Eigenschaft mit dem Wert verfügt Private
. Private
Variablen werden vom untergeordneten Bereich geerbt, können aber nur in dem Bereich angezeigt oder geändert werden, in dem sie erstellt wurden.
Der folgende Befehl erstellt eine private Variable namens $ptest
im lokalen Bereich.
New-Variable -Name ptest -Value 1 -Option Private
Sie können den Wert von $ptest
im lokalen Bereich anzeigen und ändern.
PS> $ptest
1
PS> $ptest = 2
PS> $ptest
2
Erstellen Sie als Nächstes ein Sample.ps1 Skript, das die folgenden Befehle enthält. Der Befehl versucht, den Wert von $ptest
anzuzeigen und zu ändern.
In Sample.ps1:
"The value of `$Ptest is $Ptest."
"The value of `$Ptest is $global:Ptest."
Die $ptest
Variable ist im Skriptbereich nicht sichtbar, die Ausgabe ist leer.
"The value of $Ptest is ."
"The value of $Ptest is ."
Beispiel 5: Verwenden einer lokalen Variablen in einem Remotebefehl
Verwenden Sie für Variablen in einem Remotebefehl, der in der lokalen Sitzung erstellt wurde, den using
Bereichsmodifizierer. PowerShell geht davon aus, dass die Variablen in Remotebefehlen in der Remotesitzung erstellt wurden.
Die Syntax ist:
$using:<VariableName>
Die folgenden Befehle erstellen beispielsweise eine $Cred
Variable in der lokalen Sitzung und verwenden dann die $Cred
Variable in einem Remotebefehl:
$Cred = Get-Credential
Invoke-Command $s {Remove-Item .\Test*.ps1 -Credential $using:Cred}
Der using
Bereichsmodifizierer wurde in PowerShell 3.0 eingeführt.
Siehe auch
PowerShell
A cross-platform task automation solution made up of a command-line shell and a scripting language.
Feedback
Feedback senden und anzeigen für