PowerShell
Automatische variabelen
Zoeken…
Invoering
Automatische variabelen worden gemaakt en onderhouden door Windows PowerShell. Men heeft de mogelijkheid om een variabele zo ongeveer elke naam in het boek te noemen; De enige uitzonderingen hierop zijn de variabelen die al door PowerShell worden beheerd. Deze variabelen zullen ongetwijfeld de meest repetitieve objecten zijn die u in PowerShell gebruikt naast functies (zoals $? - geeft de status Succes / Mislukking van de laatste bewerking aan)
Syntaxis
-
$$
- Bevat het laatste token in de laatste regel die door de sessie is ontvangen. -
$^
- Bevat het eerste token in de laatste regel die door de sessie is ontvangen. -
$?
- Bevat de uitvoeringsstatus van de laatste bewerking. -
$_
- Bevat het huidige object in de pijplijn
$ pid
Bevat proces-ID van het huidige hostingproces.
PS C:\> $pid
26080
Booleaanse waarden
$true
en $false
zijn twee variabelen die logisch WAAR en ONWAAR vertegenwoordigen.
Merk op dat u het dollarteken moet opgeven als het eerste teken (dat verschilt van C #).
$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
Merk op dat wanneer u boolean true / false in uw code gebruikt, u $true
of $false
schrijft, maar wanneer Powershell een boolean retourneert, ziet het eruit als True
of False
$ null
$null
wordt gebruikt om afwezige of ongedefinieerde waarde weer te geven.
$null
kan worden gebruikt als een lege tijdelijke aanduiding voor lege waarde in arrays:
PS C:\> $array = 1, "string", $null
PS C:\> $array.Count
3
Wanneer we dezelfde array gebruiken als de bron voor ForEach-Object
, worden alle drie de items (inclusief $ null) verwerkt:
PS C:\> $array | ForEach-Object {"Hello"}
Hello
Hello
Hello
Doe voorzichtig! Dit betekent dat ForEach-Object
zelf $null
ZAL verwerken:
PS C:\> $null | ForEach-Object {"Hello"} # THIS WILL DO ONE ITERATION !!!
Hello
Wat een zeer onverwacht resultaat is als je het vergelijkt met de klassieke foreach
lus:
PS C:\> foreach($i in $null) {"Hello"} # THIS WILL DO NO ITERATION
PS C:\>
$ OFS
Variabele met de naam Output Field Separator bevat een tekenreekswaarde die wordt gebruikt bij het converteren van een array naar een tekenreeks. Standaard $OFS = " "
( een spatie ), maar dit kan worden gewijzigd:
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
Bevat het object / item dat momenteel door de pijplijn wordt verwerkt.
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
en $_
zijn identiek en kunnen door elkaar worden gebruikt, maar $_
is verreweg het meest gebruikt.
$?
Bevat de status van de laatste bewerking. Als er geen fout is, is deze ingesteld op True
:
PS C:\> Write-Host "Hello"
Hello
PS C:\> $?
True
Als er een fout is, is deze ingesteld op 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
$ error
Matrix van meest recente foutobjecten. De eerste in de array is de meest recente:
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
Gebruikstips: -Force
bij gebruik van de $error
variabele in een formaat-cmdlet (bijv. Format-list) op de schakelaar -Force
. Anders zal het formaat cmdlet de $error
inhoud op de hierboven getoonde manier uitvoeren.
Foutmeldingen kunnen worden verwijderd via bijvoorbeeld $Error.Remove($Error[0])
.