about_Automatic_Variables
Kurze Beschreibung
Beschreibt Variablen, die Zustandsinformationen für Und werden von PowerShell erstellt und verwaltet.
Konzeptionell gelten die meisten dieser Variablen als schreibgeschützt. Obwohl sie geschrieben werden können , sollten sie aus Gründen der Abwärtskompatibilität nicht in geschrieben werden.
Hier sehen Sie eine Liste der automatischen Variablen in PowerShell:
- $$
- $?
- $^
- $_
- $args
- $ConsoleFileName
- $EnabledExperimentalFeatures
- $Error
- $Event
- $EventArgs
- $EventSubscriber
- $ExecutionContext
- $false
- $foreach
- $HOME
- $Host
- $input
- $IsCoreCLR
- $IsLinux
- $IsMacOS
- $IsWindows
- $LASTEXITCODE
- $Matches
- $MyInvocation
- $NestedPromptLevel
- $null
- $PID
- $PROFILE
- $PSBoundParameters
- $PSCmdlet
- $PSCommandPath
- $PSCulture
- $PSDebugContext
- $PSEdition
- $PSHOME
- $PSItem
- $PSScriptRoot
- $PSSenderInfo
- $PSUICulture
- $PSVersionTable
- $PWD
- $Sender
- $ShellId
- $StackTrace
- $switch
- $this
- $true
Lange Beschreibung
$$
Enthält das letzte Token in der letzten Zeile, die von der Sitzung empfangen wurde.
$?
Enthält die Ausführung status des letzten Befehls. Es enthält True , wenn der letzte Befehl erfolgreich war, und False , wenn er fehlgeschlagen ist.
Für Cmdlets und erweiterte Funktionen, die in mehreren Phasen in einer Pipeline ausgeführt werden, z. B. in beiden process
end
Blöcken, wird beim Aufrufen this.WriteError()
bzw$PSCmdlet.WriteError()
. jeweils an einem beliebigen Punkt auf False festgelegt$?
, wie this.ThrowTerminatingError()
und $PSCmdlet.ThrowTerminatingError()
.
Das Write-Error
Cmdlet legt immer sofort nach der Ausführung auf False fest$?
, wird aber für eine Funktion, die es aufruft, nicht auf False festgelegt$?
:
function Test-WriteError
{
Write-Error "Bad"
"The `$? variable is: $?"
}
Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError:
Line |
7 | Test-WriteError
| ~~~~~~~~~~~~~~~
| Bad
The $? variable is: False
Now the $? variable is: True
Für letztere Zwecke sollte stattdessen $PSCmdlet.WriteError()
verwendet werden.
Für native Befehle (ausführbare Dateien) $?
wird auf True festgelegt, wenn $LASTEXITCODE
0 ist, und auf False festgelegt, wenn $LASTEXITCODE
ein anderer Wert ist.
Hinweis
Bis PowerShell 7 wird beim Umschließen einer Anweisung in Klammern, Unterexpressionssyntax (...)
$(...)
oder einem Arrayausdruck @(...)
immer auf True zurückgesetzt$?
. Wird beispielsweise (Write-Error)
als True angezeigt$?
. Dieses Verhalten hat sich in PowerShell 7 geändert, sodass immer $?
der tatsächliche Erfolg des letzten Befehls in diesen Ausdrücken angezeigt wird.
$^
Enthält das erste Token in der letzten Zeile, die von der Sitzung empfangen wird.
$_
Wie in $PSItem
. Enthält das aktuelle Objekt im Pipelineobjekt. Sie können diese Variable in Befehlen verwenden, die eine Aktion für jedes Objekt in einer Pipeline ausführen.
Weitere Informationen finden Sie unter about_PSItem.
$args
Enthält ein Array von Werten für nicht deklarierte Parameter, die an eine Funktion, ein Skript oder einen Skriptblock übergeben werden. Wenn Sie eine Funktion erstellen, können Sie die Parameter mit dem param
Schlüsselwort (keyword) oder durch Hinzufügen einer durch Trennzeichen getrennten Liste von Parametern in Klammern nach dem Funktionsnamen deklarieren.
In einer Ereignisaktion enthält die $args
Variable Objekte, die die Ereignisargumente des zu verarbeitenden Ereignisses darstellen. Diese Variable wird nur innerhalb des Action
Blocks eines Ereignisregistrierungsbefehls aufgefüllt. Der Wert dieser Variablen kann auch in der SourceArgs-Eigenschaft des zurückgegebenen PSEventArgs-ObjektsGet-Event
gefunden werden.
$ConsoleFileName
Enthält den Pfad der Konsolendatei (.psc1
), die zuletzt in der Sitzung verwendet wurde. Diese Variable wird aufgefüllt, wenn Sie PowerShell mit dem PSConsoleFile-Parameter starten oder wenn Sie das Export-Console
Cmdlet verwenden, um Snap-In-Namen in eine Konsolendatei zu exportieren.
Wenn Sie das Export-Console
Cmdlet ohne Parameter verwenden, aktualisiert es automatisch die Konsolendatei, die zuletzt in der Sitzung verwendet wurde. Sie können diese automatische Variable verwenden, um die zu aktualisierende Datei zu bestimmen.
$EnabledExperimentalFeatures
Enthält eine Liste der Namen der experimentellen Features, die aktiviert sind.
$Error
Enthält ein Array von Fehlerobjekten, die die neuesten Fehler darstellen. Der neueste Fehler ist das erste Fehlerobjekt im Array $Error[0]
.
Um zu verhindern, dass dem $Error
Array ein Fehler hinzugefügt wird, verwenden Sie den allgemeinen ErrorAction-Parameter mit dem Wert Ignore. Weitere Informationen findest du unter about_CommonParameters.
$Event
Enthält ein PSEventArgs-Objekt , das das zu verarbeitende Ereignis darstellt. Diese Variable wird nur im Action
Block eines Ereignisregistrierungsbefehls aufgefüllt, z. B Register-ObjectEvent
. . Der Wert dieser Variablen ist dasselbe Objekt, das das Get-Event
Cmdlet zurückgibt. Sie können die Eigenschaften der Event
Variablen, z $Event.TimeGenerated
. B. , in einem Action
Skriptblock verwenden.
$EventArgs
Enthält ein -Objekt, das das erste Ereignisargument darstellt, das von EventArgs des verarbeiteten Ereignisses abgeleitet wird. Diese Variable wird nur innerhalb des Action
Blocks eines Ereignisregistrierungsbefehls aufgefüllt. Der Wert dieser Variablen kann auch in der SourceEventArgs-Eigenschaft des zurückgegebenen PSEventArgs-ObjektsGet-Event
gefunden werden.
$EventSubscriber
Enthält ein PSEventSubscriber-Objekt , das den Ereignisabonnent des zu verarbeitenden Ereignisses darstellt. Diese Variable wird nur innerhalb des Action
Blocks eines Ereignisregistrierungsbefehls aufgefüllt. Der Wert dieser Variablen ist dasselbe Objekt, das das Get-EventSubscriber
Cmdlet zurückgibt.
$ExecutionContext
Enthält ein EngineIntrinsics-Objekt , das den Ausführungskontext des PowerShell-Hosts darstellt. Sie können diese Variable verwenden, um die Ausführungsobjekte zu finden, die für Cmdlets verfügbar sind.
$false
Enthält False. Sie können diese Variable verwenden, um False in Befehlen und Skripts darzustellen, anstatt die Zeichenfolge "false"
zu verwenden. Die Zeichenfolge kann als True interpretiert werden, wenn sie in eine nicht leere Zeichenfolge oder in eine ganze Zahl ungleich null konvertiert wird.
$foreach
Enthält den Enumerator (nicht die resultierenden Werte) einer ForEach-Schleife . Die $ForEach
Variable ist nur vorhanden, während die ForEach
Schleife ausgeführt wird. Sie wird gelöscht, nachdem die Schleife abgeschlossen wurde.
Enumeratoren enthalten Eigenschaften und Methoden, die Sie verwenden können, um Schleifenwerte abzurufen und die aktuelle Schleifeniteration zu ändern. Weitere Informationen finden Sie unter Verwenden von Enumeratoren.
$HOME
Enthält den vollständigen Pfad des Basisverzeichnisses des Benutzers. Unter Windows verwendet diese Variable den Wert der "$env:USERPROFILE"
Windows-Umgebungsvariable, in der Regel C:\Users\<UserName>
. Unter Unix verwendet diese Variable den Wert der Umgebungsvariable HOME
.
Wichtig
Windows kann den Speicherort des Benutzerprofils umleiten. Dies bedeutet, dass $HOME
möglicherweise nicht derselbe Wert wie "$env:HOMEDRIVE$env:HOMEPATH"
vorhanden ist.
$Host
Enthält ein -Objekt, das die aktuelle Hostanwendung für PowerShell darstellt.
Sie können diese Variable verwenden, um den aktuellen Host in Befehlen darzustellen oder die Eigenschaften des Hosts anzuzeigen oder zu ändern, z$Host.version
. B. oder $Host.CurrentCulture
.$Host.UI.RawUI.BackGroundColor = "Red"
Hinweis
Die Farbeinstellungen in $Host.PrivateData
wurden durch die Einstellungsvariable $PSStyle
ersetzt. Weitere Informationen finden Sie unter about_ANSI_Terminals.
$input
Enthält einen Enumerator, der alle Eingaben aufzählt, die an eine Funktion übergeben werden.
Die $input
Variable ist nur für Funktionen, Skriptblöcke (bei denen es sich um unbenannte Funktionen handelt) und Skriptdateien (bei denen es sich um gespeicherte Skriptblöcke handelt) verfügbar.
In einer Funktion ohne
begin
einen -process
oderend
-Block listet die$input
Variable die Auflistung aller Eingaben für die Funktion auf.begin
Im Block enthält die$input
Variable keine Daten.process
Im Block enthält die$input
Variable das aktuelle Objekt in der Pipeline.end
Im Block listet die$input
Variable die Auflistung aller Eingaben für die Funktion auf.Hinweis
Sie können die
$input
Variable nicht sowohl im Blockend
als auchprocess
im Block in derselben Funktion oder im gleichen Skriptblock verwenden.
Da $input
es sich um einen Enumerator handelt, ist $input
der Zugriff auf eine seiner Eigenschaften nicht mehr verfügbar. Sie können in einer anderen Variablen speichern $input
, um die Eigenschaften wiederzuverwenden $input
.
Enumeratoren enthalten Eigenschaften und Methoden, die Sie verwenden können, um Schleifenwerte abzurufen und die aktuelle Schleifeniteration zu ändern. Weitere Informationen finden Sie unter Verwenden von Enumeratoren.
Die $input
Variable ist auch für den Befehl verfügbar, der durch den -Command
Parameter von pwsh
angegeben wird, wenn er über die Befehlszeile aufgerufen wird. Das folgende Beispiel wird über die Windows-Befehlsshell ausgeführt.
echo Hello | pwsh -Command """$input World!"""
$IsCoreCLR
Enthält $True
, ob die aktuelle Sitzung auf der .NET Core Runtime (CoreCLR) ausgeführt wird. Andernfalls enthält $False
.
$IsLinux
Enthält $True
, ob die aktuelle Sitzung unter einem Linux-Betriebssystem ausgeführt wird.
Andernfalls enthält $False
.
$IsMacOS
Enthält $True
, ob die aktuelle Sitzung unter einem MacOS-Betriebssystem ausgeführt wird.
Andernfalls enthält $False
.
$IsWindows
Enthält $TRUE
, ob die aktuelle Sitzung unter einem Windows-Betriebssystem ausgeführt wird. Andernfalls enthält $FALSE
.
$LASTEXITCODE
Enthält den Exitcode des letzten nativen Programms oder PowerShell-Skripts, das ausgeführt wurde.
Bei PowerShell-Skripts hängt der Wert von $LASTEXITCODE
davon ab, wie das Skript aufgerufen wurde und ob das exit
Schlüsselwort (keyword) verwendet wurde:
Wenn ein Skript die
exit
Schlüsselwort (keyword) verwendet:$LASTEXITCODE
wird auf den vomexit
Schlüsselwort (keyword) angegebenen Wert festgelegt. Weitere Informationen finden Sie unter about_Language_Keywords.Wenn ein Skript direkt aufgerufen wird, z. B
./Test.ps1
. oder mit dem Aufrufoperator (&
) wie& ./Test.ps1
:Der Wert von
$LASTEXITCODE
wird nicht geändert, es sei denn:- Das Skript ruft ein anderes Skript auf, das die
exit
Schlüsselwort (keyword) - Das Skript ruft einen nativen Befehl auf.
- Das Skript verwendet die
exit
Schlüsselwort (keyword)
- Das Skript ruft ein anderes Skript auf, das die
Wenn ein Skript mit
pwsh
mithilfe des File-Parameters aufgerufen wird,$LASTEXITCODE
wird auf Folgendes festgelegt:1
, wenn das Skript aufgrund einer Ausnahme beendet wurde- Der vom
exit
Schlüsselwort (keyword) angegebene Wert, wenn er im Skript verwendet wird 0
wenn das Skript erfolgreich abgeschlossen wurde
Wenn ein Skript mit
pwsh
mithilfe des Befehlsparameters aufgerufen wird,$LASTEXITCODE
wird auf Folgendes festgelegt:1
, wenn das Skript aufgrund einer Ausnahme beendet wurde oder wenn das Ergebnis des letzten Befehls auf festgelegt ist$?
$false
0
wenn das Skript erfolgreich abgeschlossen wurde und das Ergebnis des letzten Befehls auf festgelegt ist$?
$true
Weitere Informationen zu den Parametern File und Command finden Sie unter about_Pwsh.
$Matches
Die $Matches
Variable funktioniert mit den -match
Operatoren und -notmatch
. Wenn Sie skalare Eingaben an den -match
-Operator oder -notmatch
übermitteln und eine Übereinstimmung erkennt, wird ein boolescher Wert zurückgegeben und die $Matches
automatische Variable mit einer Hashtabelle mit allen übereinstimmenden Zeichenfolgenwerten aufgefüllt. Die $Matches
Hashtabelle kann auch mit Aufzeichnungen aufgefüllt werden, wenn Sie reguläre Ausdrücke mit dem -match
Operator verwenden.
Weitere Informationen zum -match
Operator finden Sie unter about_Comparison_Operators. Weitere Informationen zu regulären Ausdrücken finden Sie unter about_Regular_Expressions.
Die $Matches
Variable funktioniert auch in einer switch
Anweisung mit dem -Regex
-Parameter. Es wird auf dieselbe Weise aufgefüllt wie die -match
Operatoren und -notmatch
. Weitere Informationen zur switch
Anweisung finden Sie unter about_Switch.
Hinweis
Wenn $Matches
in einer Sitzung aufgefüllt wird, behält er den übereinstimmend wert bei, bis er von einer anderen Übereinstimmung überschrieben wird. Wenn -match
erneut verwendet wird und keine Übereinstimmung gefunden wird, wird sie nicht auf $null
zurückgesetzt$Matches
. Der zuvor übereinstimmene Wert wird in $Matches
beibehalten, bis eine andere Übereinstimmung gefunden wird.
$MyInvocation
Enthält Informationen zum aktuellen Befehl, z. B. den Namen, Parameter, Parameterwerte und Informationen darüber, wie der Befehl gestartet, aufgerufen oder aufgerufen wurde, z. B. den Namen des Skripts, das den aktuellen Befehl aufgerufen hat.
$MyInvocation
wird nur für Skripts, Funktionen und Skriptblöcke aufgefüllt. Sie können die Informationen im System.Management.Automation.InvocationInfo-Objekt verwenden, das $MyInvocation
im aktuellen Skript zurückgibt, z. B. den Namen einer Funktion ($MyInvocation.MyCommand.Name
), um den aktuellen Befehl zu identifizieren.
Dies ist nützlich, um den Namen des aktuellen Skripts zu ermitteln.
Ab PowerShell 3.0 MyInvocation
verfügt über die folgenden neuen Eigenschaften.
- PSScriptRoot : Enthält den vollständigen Pfad zum Skript, das den aktuellen Befehl aufgerufen hat. Der Wert dieser Eigenschaft wird nur aufgefüllt, wenn der Aufrufer ein Skript ist.
- PSCommandPath : Enthält den vollständigen Pfad und Dateinamen des Skripts, das den aktuellen Befehl aufgerufen hat. Der Wert dieser Eigenschaft wird nur aufgefüllt, wenn der Aufrufer ein Skript ist.
Im Gegensatz zu den $PSScriptRoot
$PSCommandPath
automatischen Variablen enthalten die Eigenschaften PSScriptRoot und PSCommandPath der $MyInvocation
automatischen Variablen Informationen zum Aufrufer oder aufrufenden Skript, nicht zum aktuellen Skript.
$NestedPromptLevel
Enthält die aktuelle Eingabeaufforderungsebene. Der Wert 0 gibt die ursprüngliche Eingabeaufforderungsebene an. Der Wert wird erhöht, wenn Sie eine geschachtelte Ebene eingeben und beim Beenden dekrementiert.
PowerShell zeigt beispielsweise eine geschachtelte Eingabeaufforderung an, wenn Sie die $Host.EnterNestedPrompt
-Methode verwenden. PowerShell stellt auch eine geschachtelte Eingabeaufforderung bereit, wenn Sie einen Haltepunkt im PowerShell-Debugger erreichen.
Wenn Sie eine geschachtelte Eingabeaufforderung eingeben, hält PowerShell den aktuellen Befehl an, speichert den Ausführungskontext und erhöht den Wert der $NestedPromptLevel
Variablen. Um zusätzliche geschachtelte Eingabeaufforderungen zu erstellen (bis zu 128 Ebenen) oder zur ursprünglichen Eingabeaufforderung zurückzukehren, schließen Sie den Befehl ab, oder geben Sie ein exit
.
Die $NestedPromptLevel
Variable hilft Ihnen beim Nachverfolgen der Eingabeaufforderungsebene. Sie können eine alternative PowerShell-Eingabeaufforderung erstellen, die diesen Wert enthält, damit er immer sichtbar ist.
$null
$null
ist eine automatische Variable, die einen NULL- oder leeren Wert enthält. Sie können diese Variable verwenden, um einen fehlenden oder nicht definierten Wert in Befehlen und Skripts darzustellen.
PowerShell behandelt $null
ein Objekt mit einem Wert oder platzhalter, sodass Sie einen $null
leeren Wert in einer Auflistung von Werten darstellen können.
Wenn $null
sie beispielsweise in einer Auflistung enthalten ist, wird sie als eines der Objekte gezählt.
$a = "one", $null, "three"
$a.count
3
Wenn Sie die $null
Variable an das ForEach-Object
Cmdlet weiterleiten, wird ein Wert für $null
generiert, genau wie für die anderen Objekte.
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
Daher können Sie keinen Parameterwert verwenden$null
. Ein Parameterwert von $null
überschreibt den Standardwert.
Da PowerShell die $null
Variable jedoch als Platzhalter behandelt, können Sie sie in Skripts wie dem folgenden verwenden, die nicht funktionieren würden, wenn $null
sie ignoriert würden.
$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday","Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday"
$currentDay = 0
foreach($day in $calendar)
{
if($day -ne $null)
{
"Appointment on $($days[$currentDay]): $day"
}
$currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch
$PID
Enthält den Prozessbezeichner (Process Identifier, PID) des Prozesses, der die aktuelle PowerShell-Sitzung hostt.
$PROFILE
Enthält den vollständigen Pfad des PowerShell-Profils für den aktuellen Benutzer und die aktuelle Hostanwendung. Sie können diese Variable verwenden, um das Profil in Befehlen darzustellen. Sie können es beispielsweise in einem Befehl verwenden, um zu bestimmen, ob ein Profil erstellt wurde:
Test-Path $PROFILE
Sie können es auch in einem Befehl verwenden, um ein Profil zu erstellen:
New-Item -ItemType file -Path $PROFILE -Force
Sie können es in einem Befehl verwenden, um das Profil in notepad.exezu öffnen:
notepad.exe $PROFILE
$PSBoundParameters
Enthält ein Wörterbuch der Parameter, die an ein Skript oder eine Funktion übergeben werden, und deren aktuelle Werte. Diese Variable verfügt nur über einen Wert in einem Bereich, in dem Parameter deklariert werden, z. B. ein Skript oder eine Funktion. Sie können sie verwenden, um die aktuellen Werte von Parametern anzuzeigen oder zu ändern oder Parameterwerte an ein anderes Skript oder eine andere Funktion zu übergeben.
In diesem Beispiel übergibt die Test2-Funktion die $PSBoundParameters
an die Test1-Funktion . Die $PSBoundParameters
werden im Format "Schlüssel " und " Wert" angezeigt.
function Test1 {
param($a, $b)
# Display the parameters in dictionary format.
$PSBoundParameters
}
function Test2 {
param($a, $b)
# Run the Test1 function with $a and $b.
Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key Value
--- -----
a Power
b Shell
$PSCmdlet
Enthält ein -Objekt, das das Cmdlet oder die erweiterte Funktion darstellt, die ausgeführt wird.
Sie können die Eigenschaften und Methoden des Objekts in Ihrem Cmdlet- oder Funktionscode verwenden, um auf die Nutzungsbedingungen zu reagieren. Beispielsweise enthält die ParameterSetName-Eigenschaft den Namen des verwendeten Parametersatzes, und die ShouldProcess-Methode fügt dem Cmdlet dynamisch die Parameter WhatIf und Confirm hinzu.
Weitere Informationen zur $PSCmdlet
automatischen Variablen finden Sie unter about_Functions_CmdletBindingAttribute und about_Functions_Advanced.
$PSCommandPath
Enthält den vollständigen Pfad und Dateinamen des Skripts, das ausgeführt wird. Diese Variable ist in allen Skripts gültig.
$PSCulture
Ab PowerShell 7 $PSCulture
spiegelt die Kultur des aktuellen PowerShell-Runspaces (Sitzung) wider. Wenn die Kultur in einem PowerShell-Runspace geändert wird, wird der $PSCulture
Wert für diesen Runspace aktualisiert.
Die Kultur bestimmt das Anzeigeformat von Elementen wie Zahlen, Währungen und Datumsangaben und wird in einem System.Globalization.CultureInfo-Objekt gespeichert. Verwenden Sie Get-Culture
, um die Kultur des Computers anzuzeigen. $PSCulture
enthält den Wert der Name-Eigenschaft .
$PSDebugContext
Beim Debuggen enthält diese Variable Informationen zur Debugumgebung. Andernfalls enthält es einen NULL-Wert . Daher können Sie sie verwenden, um zu bestimmen, ob der Debugger über eine Steuerung verfügt. Wenn es aufgefüllt ist, enthält es ein PsDebugContext-Objekt mit Breakpoints - und InvocationInfo-Eigenschaften . Die InvocationInfo-Eigenschaft verfügt über mehrere nützliche Eigenschaften, einschließlich der Location-Eigenschaft . Die Location-Eigenschaft gibt den Pfad des Skripts an, das debuggt wird.
$PSEdition
Enthält den gleichen Wert in $PSVersionTable.PSEdition
. Diese Variable ist für die Verwendung in Modulmanifestdateien verfügbar, während $PSVersionTable
dies nicht der Fall ist.
$PSHOME
Enthält den vollständigen Pfad des Installationsverzeichnisses für PowerShell, in der Regel in C:\Program Files\PowerShell\7
Windows-Systemen. Sie können diese Variable in den Pfaden von PowerShell-Dateien verwenden. Der folgende Befehl durchsucht beispielsweise die konzeptionellen Hilfethemen nach dem Wort Hilfe:
Select-String -Pattern Help -Path $PSHOME\en-US\*.txt
$PSItem
Wie in $_
. Enthält das aktuelle Objekt im Pipelineobjekt. Sie können diese Variable in Befehlen verwenden, die eine Aktion für jedes Objekt in einer Pipeline ausführen.
Weitere Informationen finden Sie unter about_PSItem.
$PSScriptRoot
Enthält den vollständigen Pfad des übergeordneten Verzeichnisses des ausführenden Skripts.
In PowerShell 2.0 ist diese Variable nur in Skriptmodulen (.psm1
) gültig.
Ab PowerShell 3.0 ist sie in allen Skripts gültig.
$PSSenderInfo
Enthält Informationen zum Benutzer, der die PSSession gestartet hat, einschließlich der Benutzeridentität und der Zeitzone des Ursprungscomputers. Diese Variable ist nur in PSSessions verfügbar.
Die $PSSenderInfo
Variable enthält die vom Benutzer konfigurierbare Eigenschaft ApplicationArguments, die standardmäßig nur das aus der $PSVersionTable
ursprünglichen Sitzung enthält. Um der ApplicationArguments-Eigenschaft Daten hinzuzufügen, verwenden Sie den ApplicationArguments-Parameter des New-PSSessionOption
Cmdlets.
$PSUICulture
Enthält den Namen der Benutzeroberflächeskultur, die im Betriebssystem konfiguriert ist. Die Benutzeroberflächenkultur bestimmt, welche Textzeichenfolgen für die Benutzeroberflächenelemente, z. B. Menüs und Meldungen, verwendet werden. Dies ist der Wert von System.Globalization.CultureInfo.CurrentUICulture.Name Eigenschaft des Systems. Verwenden Sie Get-UICulture
das Cmdlet, um das System.Globalization.CultureInfo-Objekt für das System abzurufen.
$PSVersionTable
Enthält eine schreibgeschützte Hashtabelle, die Details zur Version von PowerShell anzeigt, die in der aktuellen Sitzung ausgeführt wird. Die Tabelle enthält die folgenden Elemente:
- PSVersion : Die PowerShell-Versionsnummer
- PSEdition Diese Eigenschaft hat den Wert von "Desktop" für PowerShell 4 und niedriger sowie PowerShell 5.1 für windows-Editionen mit vollem Funktionsumfang. Diese Eigenschaft hat den Wert von
Core
für PowerShell 6 und höher sowie Windows PowerShell 5.1 für Editionen mit reduziertem Platzbedarf wie Windows Nano Server oder Windows IoT. - GitCommitId : Die Commit-ID der Quelldateien in GitHub,
- Betriebssystem : Beschreibung des Betriebssystems, unter dem PowerShell ausgeführt wird.
- Plattform : Plattform, auf der das Betriebssystem ausgeführt wird. Der Wert unter Linux und macOS ist Unix. Prüfen Sie
$IsMacOs
und$IsLinux
. - PSCompatibleVersions: Versionen von PowerShell, die mit der aktuellen Version kompatibel sind
- PSRemotingProtocolVersion : Die Version des PowerShell-Remoteverwaltungsprotokolls.
- SerializationVersion : Die Version der Serialisierungsmethode
- WSManStackVersion : Die Versionsnummer des WS-Management Stapels
$PWD
Enthält ein Pfadobjekt, das den vollständigen Pfad des aktuellen Verzeichnisspeicherorts für den aktuellen PowerShell-Runspace darstellt.
Hinweis
PowerShell unterstützt mehrere Runspaces pro Prozess. Jeder Runspace verfügt über ein eigenes aktuelles Verzeichnis. Dies ist nicht mit dem aktuellen Verzeichnis des Prozesses identisch: [System.Environment]::CurrentDirectory
.
$Sender
Enthält das Objekt, das dieses Ereignis generiert hat. Diese Variable wird nur im Aktionsblock eines Ereignisregistrierungsbefehls aufgefüllt. Der Wert dieser Variablen befindet sich auch in der Sender-Eigenschaft des zurückgegebenen PSEventArgs-ObjektsGet-Event
.
$ShellId
Enthält den Bezeichner der aktuellen Shell.
$StackTrace
Enthält eine Stapelablaufverfolgung für den neuesten Fehler.
$switch
Enthält den Enumerator, nicht die resultierenden Werte einer Switch
Anweisung. Die $switch
Variable ist nur vorhanden, während die Switch
-Anweisung ausgeführt wird. Sie wird gelöscht, wenn die -Anweisung die switch
Ausführung abgeschlossen hat. Weitere Informationen finden Sie unter about_Switch.
Enumeratoren enthalten Eigenschaften und Methoden, die Sie verwenden können, um Schleifenwerte abzurufen und die aktuelle Schleifeniteration zu ändern. Weitere Informationen finden Sie unter Verwenden von Enumeratoren.
$this
Die $this
Variable wird in Skriptblöcken verwendet, die Klassen erweitern, um auf die instance der Klasse selbst zu verweisen.
Das Extensible Type System (ETS) von PowerShell ermöglicht das Hinzufügen von Eigenschaften zu Klassen mithilfe von Skriptblöcken. In einem Skriptblock, der eine Skripteigenschaft oder Skriptmethode definiert, verweist die $this
Variable auf eine instance des Objekts der Klasse, die erweitert wird. PowerShell verwendet beispielsweise ETS, um der FileInfo-Klasse die BaseName-Eigenschaft hinzuzufügen.
PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List
TypeName : System.IO.FileInfo
Name : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0)
{$this.Name.Remove($this.Name.Length - $this.Extension.Length
)}else{$this.Name};}
Weitere Informationen finden Sie unter about_Types.ps1xml.
In einer PowerShell-Klasse bezieht sich die $this
Variable auf das instance -Objekt der Klasse selbst, was den Zugriff auf die in der -Klasse definierten Eigenschaften und Methoden ermöglicht. Weitere Informationen finden Sie unter about_Classes.
Die $this
Variable wird auch von .NET-Ereignisklassen verwendet, die Skriptblöcke als Delegaten für den Ereignishandler verwenden. Stellt in diesem Szenario das -Objekt dar, $this
das das Ereignis stammt, das als Ereignissender bezeichnet wird.
$True
Enthält True. Sie können diese Variable verwenden, um True in Befehlen und Skripts darzustellen.
Verwenden von Enumeratoren
Die $input
Variablen , $foreach
, und $switch
sind alle Enumeratoren, die zum Durchlaufen der Werte verwendet werden, die von ihrem enthaltenden Codeblock verarbeitet werden.
Ein Enumerator enthält Eigenschaften und Methoden, die Sie zum Voranbringen oder Zurücksetzen der Iteration oder zum Abrufen von Iterationswerten verwenden können. Das direkte Manipulieren von Enumeratoren wird nicht als bewährte Methode betrachtet.
Innerhalb von Schleifen sollten Flusssteuerungsschlüsselwörter umbrechen und fortfahren bevorzugt werden.
In Funktionen, die Pipelineeingaben akzeptieren, empfiehlt es sich, Parameter mit den Attributen ValueFromPipeline oder ValueFromPipelineByPropertyName zu verwenden.
Weitere Informationen finden Sie unter about_Functions_Advanced_Parameters.
MoveNext
Die MoveNext-Methode bringt den Enumerator zum nächsten Element der Auflistung. MoveNext gibt zurück True
, wenn der Enumerator erfolgreich erweitert wurde, False
wenn der Enumerator das Ende der Auflistung überschritten hat.
Hinweis
Der von MoveNext zurückgegebene boolesche Wert wird an den Ausgabestream gesendet.
Sie können die Ausgabe unterdrücken, indem Sie sie an oder als Piping an [void]
Out-Null (Out-Null) eingeben.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Die Reset -Methode legt den Enumerator auf seine Ursprüngliche Position fest, die sich vor dem ersten Element in der Auflistung befindet.
Current
Die Current -Eigenschaft ruft das -Element in der Auflistung oder Pipeline an der aktuellen Position des Enumerators ab.
Die Current Eigenschaft gibt weiterhin dieselbe Eigenschaft zurück, bis MoveNext aufgerufen wird.
Beispiele
Beispiel 1: Verwenden der variablen $input
Im folgenden Beispiel löscht der Zugriff auf die $input
Variable die Variable, bis der Prozessblock das nächste Mal ausgeführt wird. Mithilfe der Reset -Methode wird die $input
Variable auf den aktuellen Pipelinewert zurückgesetzt.
function Test
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tInput: $input"
"`tAccess Again: $input"
$input.Reset()
"`tAfter Reset: $input"
}
}
"one","two" | Test
Iteration: 0
Input: one
Access Again:
After Reset: one
Iteration: 1
Input: two
Access Again:
After Reset: two
Der Prozessblock erhöht die $input
Variable automatisch, auch wenn Sie nicht darauf zugreifen.
$skip = $true
function Skip
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
if ($skip)
{
"`tSkipping"
$skip = $false
}
else
{
"`tInput: $input"
}
}
}
"one","two" | Skip
Iteration: 0
Skipping
Iteration: 1
Input: two
Beispiel 2: Verwenden von $input außerhalb des Prozessblocks
Außerhalb des Prozessblocks stellt die $input
Variable alle Werte dar, die an die Funktion übergeben werden.
- Durch den Zugriff auf die
$input
Variable werden alle Werte gelöscht. - Die Reset -Methode setzt die gesamte Auflistung zurück.
- Die Current Eigenschaft wird nie aufgefüllt.
- Die MoveNext-Methode gibt false zurück, da die Auflistung nicht erweitert werden kann.
- Durch Aufrufen von MoveNext wird die
$input
Variable gelöscht.
- Durch Aufrufen von MoveNext wird die
Function All
{
"All Values: $input"
"Access Again: $input"
$input.Reset()
"After Reset: $input"
$input.MoveNext() | Out-Null
"After MoveNext: $input"
}
"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:
Beispiel 3: Verwenden des $input.Current Eigenschaft
Mit der Current -Eigenschaft kann mehrmals auf den aktuellen Pipelinewert zugegriffen werden, ohne die Reset -Methode zu verwenden. Der Prozessblock ruft nicht automatisch die MoveNext-Methode auf.
Die Current Eigenschaft wird nie aufgefüllt, es sei denn, Sie rufen MoveNext explizit auf. Auf die Current Eigenschaft kann mehrmals innerhalb des Prozessblocks zugegriffen werden, ohne seinen Wert zu löschen.
function Current
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tBefore MoveNext: $($input.Current)"
$input.MoveNext() | Out-Null
"`tAfter MoveNext: $($input.Current)"
"`tAccess Again: $($input.Current)"
}
}
"one","two" | Current
Iteration: 0
Before MoveNext:
After MoveNext: one
Access Again: one
Iteration: 1
Before MoveNext:
After MoveNext: two
Access Again: two
Beispiel 4: Verwenden der variablen $foreach
$input
Im Gegensatz zur Variablen stellt die $foreach
Variable immer alle Elemente in der Auflistung dar, wenn direkt darauf zugegriffen wird. Verwenden Sie die Current -Eigenschaft, um auf das aktuelle Auflistungselement zuzugreifen, und die ResetMoveNext-Methoden , um den Wert zu ändern.
Hinweis
Jede Iteration der foreach
Schleife ruft automatisch die MoveNext-Methode auf.
Die folgende Schleife wird nur zweimal ausgeführt. In der zweiten Iteration wird die Auflistung in das dritte Element verschoben, bevor die Iteration abgeschlossen ist. Nach der zweiten Iteration sind nun keine weiteren Werte mehr zu durchlaufen, und die Schleife wird beendet.
Die MoveNext-Eigenschaft wirkt sich nicht auf die Variable aus, die ausgewählt wurde, um die Auflistung zu durchlaufen ($Num
).
$i = 0
foreach ($num in ("one","two","three"))
{
"Iteration: $i"
$i++
"`tNum: $num"
"`tCurrent: $($foreach.Current)"
if ($foreach.Current -eq "two")
{
"Before MoveNext (Current): $($foreach.Current)"
$foreach.MoveNext() | Out-Null
"After MoveNext (Current): $($foreach.Current)"
"Num hasn't changed: $num"
}
}
Iteration: 0
Num: one
Current: one
Iteration: 1
Num: two
Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num hasn't changed: two
Mithilfe der Reset -Methode wird das aktuelle Element in der Auflistung zurückgesetzt. Im folgenden Beispiel werden die ersten beiden Elemente zweimal durchlaufen, da die Reset -Methode aufgerufen wird. Nach den ersten beiden Schleifen schlägt die if
Anweisung fehl, und die Schleife durchlaufen alle drei Elemente normal.
Wichtig
Dies kann zu einer Endlosschleife führen.
$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
("`t" * $stopLoop) + "Current: $($foreach.Current)"
if ($num -eq "two" -and $stopLoop -lt 2)
{
$foreach.Reset()
("`t" * $stopLoop) + "Reset Loop: $stopLoop"
$stopLoop++
}
}
Current: one
Current: two
Reset Loop: 0
Current: one
Current: two
Reset Loop: 1
Current: one
Current: two
Current: three
Beispiel 5: Verwenden der variablen $switch
Die $switch
Variable hat genau die gleichen Regeln wie die $foreach
Variable. Im folgenden Beispiel werden alle Enumeratorkonzepte veranschaulicht.
Hinweis
Beachten Sie, dass der NotEvaluated-Fall nie ausgeführt wird, obwohl nach der MoveNext-Methode keine break
Anweisung vorhanden ist.
$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
"MoveNext" {
"`tMoveNext"
$switch.MoveNext() | Out-Null
"`tAfter MoveNext: $($switch.Current)"
}
# This case is never evaluated.
"NotEvaluated" {
"`tAfterMoveNext: $($switch.Current)"
}
"Reset" {
if (!$stopInfinite)
{
"`tReset"
$switch.Reset()
$stopInfinite = $true
}
}
default {
"Default (Current): $($switch.Current)"
}
}
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Reset
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Default (Current): End