PowerShell
Переменные в PowerShell
Поиск…
Вступление
Переменные используются для хранения значений. Пусть значение будет любого типа, мы должны его хранить где-нибудь, чтобы мы могли использовать его во всей консоли / скрипте. Имена переменных в PowerShell начинаются с $ , как в $ Variable1 , а значения присваиваются с помощью = , например $ Variable1 = "Value 1" .PowerShell поддерживает огромное количество типов переменных; такие как текстовые строки, целые числа, десятичные знаки, массивы и даже расширенные типы, такие как номера версий или IP-адреса.
Простая переменная
Все переменные в powershell начинаются с знака доллара США ( $
). Самый простой пример:
$foo = "bar"
Этот оператор выделяет переменную с именем foo
со строковым значением «bar».
Удаление переменной
Чтобы удалить переменную из памяти, можно использовать командлет Remove-Item
. Примечание. Имя переменной НЕ включает $
.
Remove-Item Variable:\foo
Variable
есть провайдер, позволяющий большинству командлетов * -item работать так же, как файловые системы.
Другим методом удаления переменной является использование командлета Remove-Variable и его псевдоним rv
$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console
Remove-Variable -Name var
$var
#also can use alias 'rv'
rv var
Объем
По умолчанию сфера для переменного является вшит контейнером. Если внешний сценарий или другой контейнер, то область действия - Global
. Чтобы указать область действия , она имеет префикс имени переменной $scope:varname
:
$foo = "Global Scope"
function myFunc {
$foo = "Function (local) scope"
Write-Host $global:foo
Write-Host $local:foo
Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo
Выход:
Global Scope Function (local) scope Function (local) scope Global Scope Global Scope
Чтение вывода CmdLet
По умолчанию, powershell вернет результат в вызывающий Entity. Рассмотрим ниже пример,
Get-Process -Name excel
Это просто возвращает возвращаемый процесс, который соответствует имени excel, вызывающему объекту. В этом случае узел PowerShell. Он печатает что-то вроде,
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1037 54 67632 62544 617 5.23 4544 1 EXCEL
Теперь, если вы назначаете выход переменной, она просто ничего не печатает. И, конечно, переменная содержит выход. (Будь он строкой, Объект - Любой тип, если на то пошло)
$allExcel = Get-Process -Name excel
Итак, скажем, у вас есть сценарий, в котором вы хотите назначить переменную динамическим именем, вы можете использовать параметр -OutVariable
Get-Process -Name excel -OutVariable AllRunningExcel
Обратите внимание, что здесь отсутствует «$». Основное различие между этими двумя назначениями заключается в том, что он также выводит результат отдельно от назначения его переменной AllRunningExcel. Вы также можете назначить его другой переменной.
$VarOne = Get-Process -Name excel -OutVariable VarTwo
Хотя, приведенный выше сценарий очень редок, обе переменные $ VarOne & $ VarTwo будут иметь одинаковое значение.
Теперь рассмотрим это,
Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE
Первое утверждение просто получило бы процесс excel и присвоило бы его переменной MSOFFICE, а затем выполнило бы процессы ms word и «добавило» это к существующему значению MSOFFICE. Это будет выглядеть примерно так,
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1047 54 67720 64448 618 5.70 4544 1 EXCEL
1172 70 50052 81780 584 1.83 14968 1 WINWORD
Перечисление списков нескольких переменных
Powershell допускает множественное назначение переменных и обрабатывает почти все, как массив или список. Это означает, что вместо того, чтобы делать что-то вроде этого:
$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]
Вы можете просто сделать это:
$foo, $bar, $baz = $input.Split(".")
Так как Powershell рассматривает присвоения таким образом, как списки, если в списке больше значений, чем элементов в списке переменных для их назначения, последняя переменная становится массивом оставшихся значений. Это означает, что вы также можете делать такие вещи:
$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"
Массивы
Объявление Array в Powershell практически не отличается от экземпляра любой другой переменной, т. Е. Используется синтаксис $name =
. Элементы массива объявляются путем разделения их запятыми ( ,
):
$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"
Добавление в arry
Добавление в массив так же просто, как использование оператора +
:
$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!
Объединение массивов вместе
Опять же, это так же просто, как использование оператора +
$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7