PowerShell
Automatische Variablen
Suche…
Einführung
Automatische Variablen werden von Windows PowerShell erstellt und verwaltet. Man hat die Möglichkeit, eine Variable fast jeden Namen im Buch aufzurufen. Die einzigen Ausnahmen sind die Variablen, die bereits von PowerShell verwaltet werden. Diese Variablen sind ohne Zweifel die am häufigsten wiederkehrenden Objekte, die Sie in PowerShell neben Funktionen verwenden (z. B. $? - zeigt den Status des letzten Vorgangs an.
Syntax
-
$$
- Enthält das letzte Token in der letzten von der Sitzung empfangenen Zeile. -
$^
- Enthält das erste Token in der letzten Zeile, die von der Sitzung empfangen wurde. -
$?
- Enthält den Ausführungsstatus der letzten Operation. -
$_
- Enthält das aktuelle Objekt in der Pipeline
$ pid
Enthält die Prozess-ID des aktuellen Hosting-Prozesses.
PS C:\> $pid
26080
Boolesche Werte
$true
und $false
sind zwei Variablen, die logisch TRUE und FALSE darstellen.
Beachten Sie, dass Sie das Dollarzeichen als erstes Zeichen angeben müssen (was sich von C # unterscheidet).
$boolExpr = "abc".Length -eq 3 # length of "abc" is 3, hence $boolExpr will be True
if($boolExpr -eq $true){
"Length is 3"
}
# result will be "Length is 3"
$boolExpr -ne $true
#result will be False
Beachten Sie, dass Sie bei der Verwendung von boolean true / false in Ihrem Code $true
oder $false
schreiben. Wenn Powershell jedoch einen boolean zurückgibt, sieht es aus wie True
oder False
$ null
$null
wird verwendet, um einen abwesenden oder undefinierten Wert darzustellen.
$null
kann als leerer Platzhalter für leere Werte in Arrays verwendet werden:
PS C:\> $array = 1, "string", $null
PS C:\> $array.Count
3
Wenn wir dasselbe Array als Quelle für ForEach-Object
, werden alle drei Elemente (einschließlich $ null) verarbeitet:
PS C:\> $array | ForEach-Object {"Hello"}
Hello
Hello
Hello
Achtung! Das bedeutet , dass ForEach-Object
- Prozess wird auch $null
ganz von selbst:
PS C:\> $null | ForEach-Object {"Hello"} # THIS WILL DO ONE ITERATION !!!
Hello
Das ist ein sehr unerwartetes Ergebnis, wenn Sie es mit der klassischen foreach
Schleife vergleichen:
PS C:\> foreach($i in $null) {"Hello"} # THIS WILL DO NO ITERATION
PS C:\>
$ OFS
Variable mit dem Namen Ausgabefeldtrennzeichen enthält einen Zeichenfolgewert, der beim Konvertieren eines Arrays in einen String verwendet wird. Standardmäßig ist $OFS = " "
( ein Leerzeichen ), es kann jedoch geändert werden:
PS C:\> $array = 1,2,3
PS C:\> "$array" # default OFS will be used
1 2 3
PS C:\> $OFS = ",." # we change OFS to comma and dot
PS C:\> "$array"
1,.2,.3
$ _ / $ PSItem
Enthält das Objekt / Element, das gerade von der Pipeline verarbeitet wird.
PS C:\> 1..5 | % { Write-Host "The current item is $_" }
The current item is 1
The current item is 2
The current item is 3
The current item is 4
The current item is 5
$PSItem
und $_
sind identisch und können austauschbar verwendet werden, aber $_
wird bei weitem am häufigsten verwendet.
$?
Enthält den Status der letzten Operation. Wenn es keinen Fehler gibt, wird es auf True
:
PS C:\> Write-Host "Hello"
Hello
PS C:\> $?
True
Wenn ein Fehler vorliegt, wird er auf False
:
PS C:\> wrt-host
wrt-host : The term 'wrt-host' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ wrt-host
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (wrt-host:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\> $?
False
$ Fehler
Array der neuesten Fehlerobjekte. Der erste im Array ist der neueste:
PS C:\> throw "Error" # resulting output will be in red font
Error
At line:1 char:1
+ throw "Error"
+ ~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Error:String) [], RuntimeException
+ FullyQualifiedErrorId : Error
PS C:\> $error[0] # resulting output will be normal string (not red )
Error
At line:1 char:1
+ throw "Error"
+ ~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Error:String) [], RuntimeException
+ FullyQualifiedErrorId : Error
Hinweise zur Verwendung: Wenn Sie die Variable $error
in einem Format-Cmdlet (z. B. format-list) verwenden, müssen Sie die -Force
. Andernfalls gibt das Format-Cmdlet den $error
Inhalt wie oben angegeben aus.
$Error.Remove($Error[0])
können über zB $Error.Remove($Error[0])
.