Sök…


Introduktion

Automatiska variabler skapas och underhålls av Windows PowerShell. Man har förmågan att kalla en variabel nästan alla namn i boken; De enda undantagen från detta är de variabler som redan hanteras av PowerShell. Dessa variabler är utan tvekan de mest repetitiva objekt som du använder i PowerShell bredvid funktioner (som $? - indikerar status för framgång / misslyckande för den senaste operationen)

Syntax

  • $$ - Innehåller det sista symbolet i den sista raden som mottagits av sessionen.
  • $^ - Innehåller det första tokenet i den sista raden som mottagits av sessionen.
  • $? - Innehåller exekveringsstatusen för den senaste åtgärden.
  • $_ - Innehåller det aktuella objektet i pipeline

$ pid

Innehåller process-ID för den aktuella värdprocessen.

PS C:\> $pid
26080

Booleska värden

$true och $false är två variabler som representerar logiskt SANT och FALSE.

Observera att du måste ange dollartecknet som det första tecknet (som skiljer sig från 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

Lägg märke till att när du använder boolean true / false i din kod skriver du $true eller $false , men när Powershell returnerar en boolean, ser det ut som True eller False

$ null

$null används för att representera frånvarande eller odefinierat värde.
$null kan användas som en tom platshållare för tomt värde i matriser:

PS C:\> $array = 1, "string", $null
PS C:\> $array.Count
3

När vi använder samma matris som källan för ForEach-Object , kommer det att bearbeta alla tre artiklarna (inklusive $ null):

PS C:\> $array | ForEach-Object {"Hello"}
Hello
Hello
Hello

Var försiktig! Detta innebär att ForEach-Object kommer att bearbeta till och med $null själv:

PS C:\> $null | ForEach-Object {"Hello"} # THIS WILL DO ONE ITERATION !!!
Hello

Vilket är mycket oväntat resultat om du jämför det med klassisk foreach :

PS C:\> foreach($i in $null) {"Hello"} # THIS WILL DO NO ITERATION
PS C:\>

$ OFS

Variabel kallad Output Field Separator innehåller strängvärde som används vid konvertering av en matris till en sträng. Som standard $OFS = " " ( ett mellanslag ), men det kan ändras:

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

Innehåller objektet / objektet som för närvarande behandlas av pipeline.

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 och $_ är identiska och kan användas omväxlande, men $_ är överlägset det mest använda.

$?

Innehåller status för den senaste operationen. När det inte finns något fel är det satt till True :

PS C:\> Write-Host "Hello"
Hello
PS C:\> $?
True

Om det finns något fel är det inställt på 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

$ fel

Array av senaste felobjekt. Den första i matrisen är den senaste:

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

Tips om användning: När du använder $error i ett format cmdlet (t.ex. formatlista), ska du vara medveten om att använda -Force omkopplaren. Annars kommer format cmdlet att mata ut $error -felinnehållet på ovan visat sätt.

Felposter kan tas bort via t.ex. $Error.Remove($Error[0]) .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow