Szukaj…


Wprowadzenie

Automatyczne zmienne są tworzone i obsługiwane przez Windows PowerShell. Można wywołać zmienną o dowolnej nazwie w książce; Jedynymi wyjątkami są zmienne, którymi już zarządza PowerShell. Te zmienne bez wątpienia będą najbardziej powtarzalnymi obiektami używanymi w programie PowerShell obok funkcji (np. $? - wskazuje status powodzenia / niepowodzenia ostatniej operacji)

Składnia

  • $$ - Zawiera ostatni token w ostatnim wierszu odebranym przez sesję.
  • $^ - Zawiera pierwszy token w ostatnim wierszu odebranym przez sesję.
  • $? - Zawiera status wykonania ostatniej operacji.
  • $_ - Zawiera bieżący obiekt w potoku

$ pid

Zawiera identyfikator bieżącego procesu hostingu.

PS C:\> $pid
26080

Wartości logiczne

$true i $false to dwie zmienne reprezentujące logiczne PRAWDA i FAŁSZ.

Zauważ, że musisz podać znak dolara jako pierwszy znak (inny niż 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

Zauważ, że kiedy używasz logicznej wartości true / false w kodzie, piszesz $true lub $false , ale kiedy PowerShell zwraca boolean, wygląda to na True lub False

$ null

$null służy do reprezentowania nieobecnej lub niezdefiniowanej wartości.
$null może być użyty jako pusty symbol zastępczy pustej wartości w tablicach:

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

Kiedy użyjemy tej samej tablicy jako źródła ForEach-Object , przetworzy wszystkie trzy elementy (w tym $ null):

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

Bądź ostrożny! Oznacza to, że ForEach-Object WILL sam przetworzy nawet $null :

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

To bardzo nieoczekiwany wynik, jeśli porównasz go do klasycznej pętli foreach :

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

$ OFS

Zmienna o nazwie Separator pól wyjściowych zawiera wartość ciągu, która jest używana podczas konwersji tablicy na ciąg. Domyślnie $OFS = " " ( spacja ), ale można to zmienić:

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

Zawiera obiekt / element aktualnie przetwarzany przez potok.

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 i $_ są identyczne i mogą być używane zamiennie, ale $_ jest zdecydowanie najczęściej używany.

$?

Zawiera status ostatniej operacji. Gdy nie ma błędu, jest ustawiony na True :

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

Jeśli występuje jakiś błąd, jest on ustawiony na 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

błąd $

Tablica najnowszych obiektów błędów. Pierwszy w tablicy jest najnowszy:

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

Wskazówki dotyczące użytkowania: Korzystając ze zmiennej $error w cmdlet formatu (np. Lista formatów), pamiętaj o użyciu przełącznika -Force . W przeciwnym razie polecenie cmdlet w formacie $error zawartość $error w przedstawiony powyżej sposób.

Wpisy błędów można usunąć za pomocą np. $Error.Remove($Error[0]) .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow