Automatische Variablen in PowerShell

In PowerShell gibt es automatische Variablen, welche direkt von PS gefüllt und verwaltet werden. Wichtig ist auch zu wissen, dass diese System-Variablen Read-Only sind. Das bedeutet, dass diese in einem Script nur gelesen, allerdings nicht verändert oder überschrieben werden können.

Variablen mit Get-Variable auflisten

Die vordefinierten automatischen Variablen in PowerShell können mit dem Cmdlet Get-Variable ausgelesen werden:

Get-Variable
Get-Variable PowerShell

$$

Die Variable $$ enthält das letzte Token in der letzten von der Sitzung empfangenen Zeile.

$?

$? beinhaltet den Ausführung-Status des letzten Befehls. Gibt TRUE zurück, wenn der letzte Befehl erfolgreich ausgeführt wurde. FALSE, falls der Befehl gescheitert ist.

function Test-WriteError
{
    Write-Error "Bad"
    $? # $false
}

Test-WriteError
$? # $true

In diesem Beispiel wird beim Ersten mal Aufrufen von $? FALSE ausgegeben, da noch nichts ausgeführt wurde und PowerShell deswegen von einem Fehler ausgeht. Beim zweiten Mal wird TRUE ausgegeben, da die Funktion erfolgreich aufgerufen wurde.

$^

Wird die PowerShell Variable $^ aufgerufen, so enthält diese das erste Token in der letzten Zeile, die von der Sitzung empfangen wurde.

$_

Die Variable $_ ist gleichzustellen mit $PSItem. Diese beinhalten immer das letzte (aktuelle) Objekt. Ein Beispiel wäre folgender PowerShell Code:

1,2,3 | foreach { write-host $_ } 
# ALTERNATIV
1,2,3 | foreach { write-host $PSItem } 

$args

Die Variable $args enthält ein Array der nicht deklarierten Parameter und / oder der Parameter-Werte, die an eine Funktion oder an ein Skript übergeben werden. In Funktionen können diese Parameter in Powershell mit “param” definiert werden.

$ConsoleFileName

$ConsoleFileName enthält den Pfad zur Konsolen-Datei (.psc1), die in der Sitzung zuletzt verwendet wurde. Diese Variable wird gefüllt, wenn
PowerShell mit dem PSConsoleFile-Parameter gestartet wird.

$Error

$Error beinhaltet ein Array der zuletzt aufgetretenen Fehler. Da es sich um ein Array in PowerShell handelt, wird der letzte Fehler mit $Error[0] aufgerufen.

Möchte man, dass ein Fehler nicht zu dieser $Error Variable hinzugefügt wird, so muss die ErrorAction auf Ignore gesetzt werden.

$Event

$Event beinhaltet ein PSEventArgs-Objekt, welches das zu verarbeitende Ereignis darstellt. Die Werte sind gleich des Cmdlets Get-Event.

$EventArgs

$EventArgs beinhaltet ein Objekt, welches den ersten Parameter beinhaltet, welcher abgearbeitet wird.

$EventSubscriber

Enthält ein PSEventSubscriber-Objekt, welches den Ereignis-Abonnenten des zu verarbeitenden Ereignisses darstellt.

$ExecutionContext

$ExecutionContext Variable beinhaltet ein EngineIntrinsics-Objekt, welches den Ausführungskontext des Windows PowerShell-Hosts darstellt. Mit dieser Variable kann man die Ausführungsobjekte suchen, die für diese Cmdlets verfügbar sind.

$false

$false beinhaltet lediglich FALSE. Mit dieser Variable lässt sich in PowerShell Befehlen oder Scripten der String “false” darstellen. Auch im Zusammenspiel mit Operatoren wird diese oft verwendet.

$foreach

$foreach enthält lediglich den Enumerator, aber nicht die Werte einer ForEach-Schleife. Die Variable $foreach existiert nur solange die ForEach-Schleife aktiv ist, danach wird diese automatisch gelöscht. Mehr Infos zu Enumeratoren.

$HOME

Die Variable $HOME beinhaltet den vollen Pfad zum User-Home Ordner. Diese Variable kann in PowerShell gleichgestellt werden zu $env:homedrive, $env:homepath. Meist verweist diese auf den Benutzer-Order: C:\Users\%username%.

$Host

Die $Host-Variable beinhaltet generelle Informationen zu Windows PowerShell. Unter anderem die PS-Version oder die Culture-Informationen wie die Sprache.

$input

$input beinhaltet den Enumerator der Eingabe, die an eine Funktion übergeben wird. Bei der Variablen “$Input” wird die Groß- und
Kleinschreibung beachtet und sie ist lediglich in Funktionen und
Skript-Blöcken verfügbar.

$IsCoreCLR

Falls die aktuelle PowerShell Session auf dem .NET Core Runtime läuft, beinhaltet die Variable $IsCoreCLR $True. Falls das nicht der Fall ist, wird $False ausgegeben.

$IsLinux

$IsLinux beinhaltet $True, wenn die aktuelle Session auf einem Linux Betriebssystem läuft. Wenn nicht, wird $False zurück gegeben.

$IsMacOS

$IsMacOS beinhaltet $True, wenn die aktuelle Session auf einem MacOS Betriebssystem läuft. Wenn nicht, wird $False zurück gegeben.

$IsWindows

$IsWindows beinhaltet $True, wenn die aktuelle Session auf einem Windows Betriebssystem läuft. Wenn nicht, wird $False zurück gegeben.

$LastExitCode

Die PS Variable $LastExitCode gibt den letzten Exit Code zurück, welcher von einer Windows-Software zurückgeliefert wurde.

$Matches

Die Variable $matches funktioniert mit den Operatoren -match und -notmacht. Diese beiden Operatoren liefern einen boolischen Wert zurück, welcher in $matches gespeichert wird.

$MyInvocation

$MyInvocation als Variable beinhaltet Informationen zu einem Befehl. Unter anderem ist gelistet, welchen Namen, Parameter des Befehls und Informationen zum Aufrauf des Befehls.

Im Gegensatz zu $PSScriptRoot und $PSCommandPath beinhaltet $MyInvocation Informationen über den Aufrufer oder aufrufendes Script.

$NestedPromptLevel

$NestedPromtLevel zeigt den aktuellen Level der Eingabe-Aufforderung an. Der Wert 0 ist der Standard-Promt-Level.

$null

$NULL ist eine automatische Variable, die einfach…NICHTS beinhaltet. Diese wird meist für Vergleiche in IF-Abfragen verwendet. Genaue Erklärung in einem extra Post: Unterschied $NULL und “”.

$PID

Die Variable $PID beinhaltet die Prozess-ID (Identifier), welcher die aktuelle PowerShell Session hostet.

$PROFILE

In der Variable $PROFILE verbirgt sich der Pfad zum PowerShell Profil des aktuellen Benutzers. Dies ist das Standard-Verzeichnis:

C:\Users\%username%\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

Warum ist das interessant? Falls man spezielle Einstellungen hinterlegt hat, kann man so die Settings von einem User zum Anderen kopieren.

$PSBoundParameters

Mit $PSBoundParameters können alle derzeit genutzten Parameter und dessen Werte angezeigt werden. Diese Variable kann nur in einem Script oder einer Funktion verwendet werden.

function Test {
   param($a, $b)

   # display the parameters
   $PSBoundParameters
}

$PSCmdlet

$PSCmdlet beinhaltet ein Objekt, welches das derzeit ausgeführte CmdLet darstellt.

$PSCommandPath

Die Var $PSCommandPath gibt den vollen Pfad inklusive den Namen des PowerShell Scripts aus.

$PSCulture

Seit PowerShell 7 gibt die Variable $PSCulture die Kultur-Informationen der aktuellen Session aus. Get-Culture gibt die Sprach-Informationen des Computers aus, aber nicht der der aktuellen Session.

$PSDebugContext

$PSDebugContext erhält während des Debuggens des Codes Informationen zur Debugumgebung. Andernfalls enthält sie einen $NULL-Wert.

$PSHOME

$PSHOME beinhaltet den Pfad zur lokalen PowerShell Installation des Windows Betriebssystems. In der Regel:

$env:windir\System32\PowerShell\v1.0

$PSItem

Die Variable $PSItem ist gleichzustellen mit $_. Diese beinhalten immer das letzte (aktuelle) Objekt. Ein Beispiel wäre folgender PowerShell Code:

1,2,3 | foreach { write-host $_ } 
# ALTERNATIV
1,2,3 | foreach { write-host $PSItem } 

$PSScriptRoot

$PSScriptRoot beinhaltet den Pfad, in dem das aktuelle PowerShell Script gespeichert ist. Mehr Informationen in einem extra Post: $PSScriptRoot.

$PSSenderInfo

$PSSenderInfo enthält Informationen über den Benutzer, welcher die PowerShell Session startet, inklusive Zeit-Zone und Computer.

$PSUICulture

$PSUICulture beinhaltet die Sprachinformationen des aktuellen Benutzers, nicht des Computers. Diese können unterschiedlich sein. Beispielsweise ein Englisches Windows, aber der User nutzt eine Deutsche Oberfläche.

$PSVersionTable

$PSVersionTable beinhaltet Deails über die PowerShell Version, welche in der derzeitigen Session läuft. Außerdem sind in dieser allgemeinen Variable noch folgende Werte hinterlegt:

  • PowerShell Version-Nummer
  • PowerShell Edition
  • GIT Commit ID
  • Betriebssystem
  • Plattform
  • Kompatible PowerShell Versionen
  • PowerShell Remote Management Protokoll Version
  • WS-Management stack Version

$PWD

$PWD beinhaltet ein Pfad-Objekt, welches den vollen Pfad des derzeitigen Verzeichnisses darstellt.

$Sender

Die Variable $sender beinhaltet ein Objekt, welches derzeit ausgeführt wird. Die Informationen können auch mit Get-Event abgefragt werden.

$ShellId

$ShellID gibt die ID (Identifier) der aktuellen Shell zurück.

$StackTrace

$StackTrace beinhaltet die Stack-Informationen der kürzlich aufgetretenen Fehler.

$switch

Die $switch Variable enthält den Enumerator eines Switch-Statements. Demzufolge ist diese nur verfügbar, solange ein switch-Anweisung ausgeführt wird.

$this

In einem Skript-Block zum Definieren einer Eigenschaft oder einer Methode verweist die Variable $This auf das erweiterte Objekt.

$true

$true beinhaltet lediglich TRUE. Mit dieser Variable lässt sich in PowerShell Befehlen oder Scripte der String “true” darstellen. Auch im Zusammenspiel mit Operatoren wird diese oft verwendet.

Johannes Huber
 

In seiner Freizeit macht Johannes nichts lieber, als für ITnator Beiträge zu schreiben. Input bekommt er hierfür von Problemen in der IT Administration von Servern, Clients und vielen weiteren IT Komponenten.

Click Here to Leave a Comment Below 0 comments