about_Automatic_Variables

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

Einführung hier einfügen.

THEMA

about_Automatic_Variables

KURZE BESCHREIBUNG

Beschreibt die Variablen, die Statusinformationen für Windows PowerShell speichern. Diese Variablen werden von Windows PowerShell erstellt und verwaltet.

LANGE BESCHREIBUNG

Hier finden Sie eine Liste der automatischen Variablen in Windows PowerShell:

$$

Enthält das letzte Token in der letzten Zeile, die von der Sitzung empfangen wurde.

$?

Enthält den Ausführungsstatus des letzten Vorgangs. Enthält „TRUE“, wenn der letzte Vorgang erfolgreich war, und „FALSE“, wenn ein Fehler aufgetreten ist.

$^

Enthält das erste Token in der letzten Zeile, die von der Sitzung empfangen wurde.

$_

Identisch mit „$PSItem“. Enthält das aktuelle Objekt im Pipelineobjekt. Sie können diese Variable in Befehlen verwenden, die eine Aktion für jedes Objekt oder für ausgewählte Objekte in einer Pipeline ausführen.

$ARGS

Enthält ein Array der nicht deklarierten Parameter und/oder Parameterwerte, die an eine Funktion, ein Skript oder einen Skriptblock übergeben werden. Wenn Sie eine Funktion erstellen, können Sie die Parameter deklarieren, indem Sie das Schlüsselwort „param“ verwenden oder nach dem Funktionsnamen in Klammern eine durch Trennzeichen getrennte Liste mit Parametern hinzufügen.

In einer Ereignisaktion enthält die $Args-Variable Objekte, die die Ereignisargumente des Ereignisses darstellen, das verarbeitet wird. Diese Variable wird nur innerhalb des Action-Blocks eines Befehls zur Ereignisregistrierung aufgefüllt. Der Wert dieser Variablen findet sich auch in der SourceArgs-Eigenschaft des PSEventArgs-Objekts (System.Management.Automation.PSEventArgs), das von „Get-Event“ zurückgegeben wird.

$CONSOLEFILENAME

Enthält den Pfad der Konsolendatei (.psc1), die in der Sitzung zuletzt verwendet wurde. Diese Variable wird aufgefüllt, wenn Sie Windows PowerShell mit dem PSConsoleFile-Parameter starten oder das Export-Console-Cmdlet verwenden, um die Namen von Snap-Ins in eine Konsolendatei zu exportieren.

Wenn Sie das Cmdlet „Export-Console“ ohne Parameter verwenden, aktualisiert es automatisch die Konsolendatei, die in der Sitzung zuletzt verwendet wurde. Mithilfe dieser automatischen Variablen können Sie bestimmen, welche Datei aktualisiert wird.

$ERROR

Enthält ein Array der Fehlerobjekte, welche die zuletzt aufgetretenen Fehler darstellen. Der zuletzt aufgetretene 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 finden Sie unter „about_CommonParameters“ (https://go.microsoft.com/fwlink/?LinkID=113216).

$EVENT

Enthält ein PSEventArgs-Objekt, welches das Ereignis darstellt, das verarbeitet wird. Diese Variable wird nur innerhalb des Action-Blocks eines Befehls zur Ereignisregistrierung aufgefüllt, wie z. B. „Register-ObjectEvent“. Der Wert dieser Variablen ist das gleiche Objekt, das vom Cmdlet „Get-Event“ zurückgegeben wird. Daher können Sie die Eigenschaften der $Event-Variablen, wie z. B. „$Event.TimeGenerated“, in einem Action-Skriptblock verwenden.

$EVENTARGS

Enthält ein Objekt, welches das erste Ereignisargument darstellt, das von „EventArgs“ des verarbeiteten Ereignisses abgeleitet wird. Diese Variable wird nur innerhalb des Action-Blocks eines Befehls zur Ereignisregistrierung aufgefüllt. Der Wert dieser Variablen findet sich auch in der SourceEventArgs-Eigenschaft des PSEventArgs-Objekts (System.Management.Automation.PSEventArgs), das von „Get-Event“ zurückgegeben wird.

$EVENTSUBSCRIBER

Enthält ein PSEventSubscriber-Objekt, das den Ereignisabonnenten des Ereignisses darstellt, das verarbeitet wird. Diese Variable wird nur innerhalb des Action-Blocks eines Befehls zur Ereignisregistrierung aufgefüllt. Der Wert dieser Variablen ist das gleiche Objekt, das vom Cmdlet „Get-EventSubscriber“ zurückgegeben wird.

$EXECUTIONCONTEXT

Enthält ein EngineIntrinsics-Objekt, das den Ausführungskontext des Windows 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 anstelle der Zeichenfolge „false“ verwenden, um den Wert „FALSE“ in Befehlen und Skripts darzustellen. Die Zeichenfolge kann als „TRUE“ interpretiert werden, wenn sie in eine nicht leere Zeichenfolge oder eine Ganzzahl ungleich Null konvertiert wird.

$FOREACH

Enthält den Enumerator (nicht die resultierenden Werte) einer ForEach-Schleife. Sie können die Eigenschaften und Methoden von Enumeratoren im Wert der Variablen „$ForEach“ verwenden. Diese Variable ist nur während der Ausführung der ForEach-Schleife vorhanden und wird nach Beendigung die Schleife gelöscht. Ausführliche Informationen finden Sie unter „about_ForEach“.

$HOME

Enthält den vollständigen Pfad des Basisverzeichnisses des Benutzers. Diese Variable ist die Entsprechung der Umgebungsvariablen „%homedrive%“ und „%homepath%“, ein typischer Wert ist „C:\Benutzer\<Benutzername>“.

$HOST

Enthält ein Objekt, das die aktuelle Host-Anwendung für Windows PowerShell darstellt. Verwenden Sie diese Variable zum Darstellen des aktuellen Hosts in Befehlen oder zum Anzeigen oder Ändern der Eigenschaften des Hosts, z. B. mit „$Host.version“, „$Host.CurrentCulture“ oder „$host.ui.rawui.setbackgroundcolor("Red")“.

$INPUT

Enthält einen Enumerator zum Aufzählen aller Eingaben, die an eine Funktion übergeben werden. Die Variable „$input“ ist nur für Funktionen und Skriptblöcke verfügbar (bei denen es sich um unbenannte Funktionen handelt). Im Process-Block einer Funktion zählt die $input-Variable das Objekt auf, das sich derzeit in der Pipeline befindet. Wenn der Process-Block abgeschlossen ist, sind keine Objekte mehr in der Pipeline vorhanden, sodass die $input-Variable eine leere Auflistung aufzählt. Wenn die Funktion keinen Process-Block besitzt, zählt die $input-Variable im End-Block die Auflistung aller Eingaben an die Funktion auf.

$LASTEXITCODE

Enthält den Exitcode des letzten Windows-basierten Programms, das ausgeführt wurde.

$MATCHES

Die $Matches-Variable arbeitet mit den Operatoren „-match“ und „-notmatch“. Wenn Sie eine skalare Eingabe an die Operatoren „-match“ oder „-notmatch“ übergeben und einer der Operatoren eine Übereinstimmung findet, wird ein boolescher Wert zurückgegeben, und es wird die automatische Variable „$Matches“ mit einer Hashtabelle aufgefüllt, die alle übereinstimmenden Zeichenfolgenwerte enthält. Weitere Informationen zum Operator „-match“ finden Sie unter „about_comparison_operators“.

$MYINVOCATION

Enthält Informationen über den aktuellen Befehl, z. B. Name, Parameter und Parameterwerte sowie Informationen darüber, wie der Befehl gestartet 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 Pfad und Dateinamen des Skripts ($MyInvocation.MyCommand.Path) oder den Namen einer Funktion ($MyInvocation.MyCommand.Name) –, um den aktuellen Befehl zu identifizieren. Dies ist besonders nützlich, um den Namen des aktuellen Skripts zu ermitteln.

Ab Windows PowerShell 3.0 weist „$MyInvocation“ die folgenden neuen Eigenschaften auf.

       -- PSScriptRoot: Contains the full path to the script that invoked the
          current command. The value of this property is populated only when
          the caller is a script.  
       -- PSCommandPath: Contains the full path and file name of the script that
          invoked the current command. The value of this property is populated
          only when the caller is a script.  

Im Gegensatz zu den automatischen Variablen „$PSScriptRoot“ und „$PSCommandPath“ enthalten die PSScriptRoot- und PSCommandPath-Eigenschaften der automatischen Variablen „$MyInvocation“ Informationen über die aufrufende Instanz oder das aufrufende Skript, nicht über das aktuelle 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 betreten, und verringert, wenn Sie die Ebene verlassen.

Windows PowerShell zeigt beispielsweise eine geschachtelte Eingabeaufforderung an, wenn Sie die $Host.EnterNestedPrompt-Methode verwenden. Windows PowerShell zeigt auch eine geschachtelte Eingabeaufforderung an, wenn Sie im Windows PowerShell-Debugger einen Haltepunkt erreichen.

Wenn Sie eine geschachtelte Ebene betreten, hält Windows PowerShell den aktuellen Befehl an, speichert den Ausführungskontext und erhöht den Wert der Variablen „$NestedPromptLevel“. Um zusätzliche geschachtelte Eingabeaufforderungen (bis zu 128 Ebenen) zu erstellen oder zur ursprünglichen Eingabeaufforderung zurückzukehren, führen Sie den Befehl aus, oder geben Sie „exit“ ein.

Mithilfe der Variablen „$NestedPromptLevel“ können Sie die Eingabeaufforderungsebene verfolgen. Sie können eine alternative Windows PowerShell-Eingabeaufforderung mit diesem Wert erstellen, sodass diese immer sichtbar ist.

$NULL

„$null“ ist eine automatische Variable, die einen NULL-Wert (einen leeren Wert) enthält. Sie können diese Variable verwenden, um in Befehlen und Skripts einen nicht vorhandenen oder nicht definierten Wert darzustellen.

Windows PowerShell behandelt „$null“ als Objekt mit einem Wert, also als expliziten Platzhalter. Daher können Sie „$null“ verwenden, um in einer Reihe von Werten einen leeren Wert darzustellen.

Wenn „$null“ beispielsweise in einer Auflistung enthalten ist, zählt die Variable als eines der Objekte.

           C:\PS> $a = ".dir", $null, ".pdf"
           C:\PS> $a.count
           3

Wenn Sie die Variable „$null“ über die Pipe an das Cmdlet „ForEach-Object“ übergeben, wird für „$null“ ein Wert generiert, ebenso wie für die anderen Objekte.

           PS C:\ps-test> ".dir", "$null, ".pdf" | Foreach {"Hello"}
           Hello
           Hello
           Hello

Aus diesem Grund können Sie „$null“ nicht verwenden, um anzugeben, dass kein Parameterwert vorhanden ist. Der Parameterwert „$null“ überschreibt den Standardparameterwert.

Da Windows PowerShell die $null-Variable jedoch als Platzhalter behandelt, können Sie sie in Skripts wie dem folgenden verwenden – dies würde nicht funktionieren, wenn $null ignoriert würde.

           $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

$OFS

„$OFS“ ist eine besondere Variable, mit der Sie eine Zeichenfolge speichern können, die Sie als Feldtrennzeichen für die Ausgabe verwenden möchten. Verwenden Sie diese Variable, wenn Sie ein Array in eine Zeichenfolge konvertieren. Der Wert von „$OFS“ lautet standardmäßig „ “, Sie können den Wert jedoch in Ihrer Sitzung ändern, indem Sie Folgendes eingeben: $OFS="<Wert>". Wenn Sie den Standardwert „ “ im Skript, im Modul oder in der Konfigurationsausgabe erwarten, achten Sie darauf, dass der Standardwert von „$OFS“ nicht an anderer Stelle im Code geändert wurde.

Beispiele:

PS> $a="1","2","3","4"
           PS> $a
           1
           2
           3
           4

PS> [string]$a
           1 2 3 4
           PS> $OFS="";[string]$a
           1234

PS> $OFS=",";[string]$a
           1,2,3,4

PS> $OFS="--PowerShellRocks--";[string]$a
           1--PowerShellRocks--2--PowerShellRocks--3--PowerShellRocks--4
           PS> $OFS="`n`n";[string]$a
           1

           2

           3

           4

$PID

Enthält die Prozess-ID (PID) des Prozesses, der die aktuelle Windows PowerShell-Sitzung hostet.

$PROFILE

Enthält den vollständigen Pfad des Windows PowerShell-Profils für den aktuellen Benutzer und die aktuelle Hostanwendung. Sie können diese Variable verwenden, um das Profil in Befehlen darzustellen. Beispielsweise können Sie die Variable in einem Befehl verwenden, um zu ermitteln, ob ein Profil erstellt wurde:

           test-path $profile

Sie können sie in einem Befehl zum Erstellen eines Profils verwenden:

           new-item -type file -path $pshome -force

Sie können sie auch in einem Befehl zum Öffnen des Profils im Editor verwenden:

           notepad $profile

$PSBOUNDPARAMETERS

Enthält ein Wörterbuch der Parameter, die an ein Skript oder eine Funktion übergeben werden, sowie ihrer aktuellen Werte. Diese Variable weist nur in einem Bereich einen Wert auf, in dem Parameter deklariert werden, z. B. einem Skript oder einer Funktion. Sie können sie verwenden, um die aktuellen Werte von Parametern anzuzeigen oder zu ändern oder um Parameterwerte an ein anderes Skript oder eine andere Funktion zu übergeben.

Zum Beispiel:

         function Test {
            param($a, $b)
            
            # Display the parameters in dictionary format.
            $PSBoundParameters
             
            # Call the Test1 function with $a and $b.
            test1 @PSBoundParameters
         }

$PSCMDLET

Enthält ein Objekt, welches das Cmdlet oder die erweiterte Funktion darstellt, das bzw. die ausgeführt wird.

Sie können die Eigenschaften und Methoden des Objekts in Ihrem Cmdlet oder Funktionscode verwenden, um auf Nutzungsbedingungen zu reagieren. Beispielsweise enthält die ParameterSetName-Eigenschaft den Namen des verwendeten Parametersatzes, und die ShouldProcess-Methode fügt dem Cmdlet dynamisch die WhatIf- und Confirm-Parameter hinzu.

Weitere Informationen zur automatischen Variablen „$PSCmdlet finden Sie unter „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

Enthält den Namen der aktuell im Betriebssystem verwendeten Kultur. Die Kultur bestimmt das Anzeigeformat für Elemente wie z. B. Zahlen, Währungen und Datumsangaben. Dies ist der Wert der System.Globalization.CultureInfo.CurrentCulture.Name-Eigenschaft des Systems. Um das System.Globalization.CultureInfo-Objekt für das System abzurufen, verwenden Sie das Cmdlet „Get-Culture“.

$PSDEBUGCONTEXT

Während des Debuggens enthält diese Variable Informationen zur Debuggingumgebung. Andernfalls enthält sie einen NULL-Wert. Daher können Sie die Variable verwenden, um darauf hinzuweisen, ob der Debugger die Steuerung übernommen hat. Wenn die Variable aufgefüllt ist, enthält sie ein PsDebugContext-Objekt, das über Breakpoints- und InvocationInfo-Eigenschaften verfügt. Die InvocationInfo-Eigenschaft besitzt einige nützliche Eigenschaften, wie z. B. die Location-Eigenschaft. Die Location-Eigenschaft gibt den Pfad des Skripts an, in dem das Debugging ausgeführt wird.

$PSHOME

Enthält den vollständigen Pfad des Installationsverzeichnisses für Windows PowerShell, in der Regel „%windir%\System32\WindowsPowerShell\v1.0“. Verwenden Sie diese Variable in den Pfaden von Windows PowerShell-Dateien. Der folgende Befehl durchsucht z. B. die Konzepthilfethemen nach dem Wort „variable“:

            Select-String -Pattern Variable -Path $pshome\*.txt

$PSITEM

Besitzt die gleiche Bedeutung wie „$_“. Enthält das aktuelle Objekt im Pipelineobjekt. Sie können diese Variable in Befehlen verwenden, die eine Aktion für jedes Objekt oder für ausgewählte Objekte in einer Pipeline ausführen.

$PSSCRIPTROOT

Enthält das Verzeichnis, aus dem ein Skript ausgeführt wird.

In Windows PowerShell 2.0 gilt diese Variable nur in Skriptmodulen (.psm1). Ab Windows PowerShell 3.0 gilt sie in allen Skripts.

$PSSENDERINFO

Enthält Informationen über den Benutzer, der die PSSession gestartet hat, einschließlich der Identität des Benutzers und der Zeitzone des Ursprungscomputers. Diese Variable ist nur in PSSessions verfügbar.

Die $PSSenderInfo-Variable enthält die durch den Benutzer konfigurierbare Eigenschaft „ApplicationArguments“, die standardmäßig nur „$PSVersionTable“ aus der Ursprungssitzung enthält. Um der ApplicationArguments-Eigenschaft Daten hinzuzufügen, verwenden Sie den ApplicationArguments-Parameter des Cmdlets „New-PSSessionOption“.

$PSUICULTURE

Enthält den Namen der aktuell im Betriebssystem verwendeten Benutzeroberflächenkultur. Die Benutzeroberflächenkultur bestimmt, welche Textzeichenfolgen für die Benutzeroberflächenelemente, z. B. Menüs und Meldungen, verwendet werden. Dies ist der Wert der System.Globalization.CultureInfo.CurrentUICulture.Name-Eigenschaft des Systems. Um das System.Globalization.CultureInfo-Objekt für das System abzurufen, verwenden Sie das Cmdlet „Get-UICulture“.

$PSVERSIONTABLE

Enthält eine schreibgeschützte Hashtabelle, die Informationen zu der in der aktuellen Sitzung ausgeführten Windows PowerShell-Version anzeigt. Die Tabelle enthält die folgenden Elemente:

    CLRVersion:            The version of the common language runtime (CLR)

    BuildVersion:          The build number of the current version

        PSVersion:             The Windows PowerShell version number

          WSManStackVersion:     The version number of the WS-Management stack

    PSCompatibleVersions:  Versions of Windows PowerShell that are
                                 compatible with the current version

          SerializationVersion   The version of the serialization method

          PSRemotingProtocolVersion
                                 The version of the Windows PowerShell remote
                                 management protocol

$PWD

Enthält eine Path-Objekt, das den vollständigen Pfad des aktuellen Verzeichnisses darstellt.

$REPORTERRORSHOWEXCEPTIONCLASS

$REPORTERRORSHOWINNEREXCEPTION
$REPORTERRORSHOWSOURCE
$REPORTERRORSHOWSTACKTRACE

Die ReportErrorShow-Variablen sind in Windows PowerShell definiert, sie sind jedoch nicht implementiert. „Get-Variable“ ruft sie ab, aber sie enthalten keine gültige Daten.

$SENDER

Enthält das Objekt, das dieses Ereignis generiert hat. Diese Variable wird nur innerhalb des Action-Blocks eines Befehls zur Ereignisregistrierung aufgefüllt. Der Wert dieser Variablen findet sich auch in der Sender-Eigenschaft des PSEventArgs-Objekts (System.Management.Automation.PSEventArgs), das von „Get-Event“ zurückgegeben wird.

$SHELLID

Enthält den Bezeichner der aktuellen Shell.

$STACKTRACE

Enthält eine Stapelüberwachung für den zuletzt aufgetretenen Fehler.

$THIS

In einem Skriptblock, der eine Skripteigenschaft oder Skriptmethode definiert, verweist die Variable „$This“ auf das Objekt, das erweitert wird.

$TRUE

Enthält „TRUE“. Sie können diese Variable verwenden, um „TRUE“ in Befehlen und Skripts darzustellen.

SIEHE AUCH

about_Hash_Tables

about_Preference_Variables

about_Variables