PowerShell
Автоматические переменные
Поиск…
Вступление
Автоматические переменные создаются и поддерживаются Windows PowerShell. У одного есть возможность вызвать переменную как раз о любом имени в книге; Единственными исключениями для этого являются переменные, которые уже управляются PowerShell. Эти переменные, без сомнения, будут самыми повторяющимися объектами, которые вы используете в PowerShell рядом с функциями (например, $? - указывает состояние успеха / отказа последней операции)
Синтаксис
-
$$
- Содержит последний токен в последней строке, полученной сеансом. -
$^
- Содержит первый токен в последней строке, полученной сеансом. -
$?
- Содержит статус выполнения последней операции. -
$_
- Содержит текущий объект в конвейере
$ PID
Содержит идентификатор процесса текущего хостинга.
PS C:\> $pid
26080
Булевы значения
$true
и $false
- две переменные, которые представляют логические TRUE и FALSE.
Обратите внимание, что вы должны указать знак доллара в качестве первого символа (который отличается от 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
Обратите внимание, что когда вы используете логическое значение true / false в вашем коде, вы записываете $true
или $false
, но когда Powershell возвращает логическое значение, оно выглядит как True
или False
$ нулевой
$null
используется для представления отсутствующего или неопределенного значения.
$null
может использоваться в качестве пустого заполнителя для пустого значения в массивах:
PS C:\> $array = 1, "string", $null
PS C:\> $array.Count
3
Когда мы используем тот же массив, что и источник ForEach-Object
, он обрабатывает все три элемента (включая $ null):
PS C:\> $array | ForEach-Object {"Hello"}
Hello
Hello
Hello
Быть осторожен! Это означает, что ForEach-Object
WILL обрабатывает даже $null
сам по себе:
PS C:\> $null | ForEach-Object {"Hello"} # THIS WILL DO ONE ITERATION !!!
Hello
Это очень неожиданный результат, если сравнить его с классическим циклом foreach
:
PS C:\> foreach($i in $null) {"Hello"} # THIS WILL DO NO ITERATION
PS C:\>
$ OFS
Переменная, называемая разделителем выходных полей, содержит строковое значение, которое используется при преобразовании массива в строку. По умолчанию $OFS = " "
( пробел ), но его можно изменить:
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
Содержит объект / элемент, который в настоящее время обрабатывается конвейером.
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
и $_
идентичны и могут использоваться взаимозаменяемо, но $_
на сегодняшний день наиболее часто используется.
$?
Содержит статус последней операции. Когда нет ошибки, она установлена в значение True
:
PS C:\> Write-Host "Hello"
Hello
PS C:\> $?
True
Если есть некоторая ошибка, для нее установлено значение 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
$ ошибка
Массив из последних объектов ошибки. Первый в массиве - самый последний:
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
Советы по использованию: при использовании переменной $error
в командлете формата (например, в списке форматов) вам следует использовать переключатель -Force
. В противном случае командлет формата будет выводить содержимое $error
в указанном выше порядке.
Записи ошибок можно удалить, например, $Error.Remove($Error[0])
.