Поиск…


Вступление

Переменные используются для хранения значений. Пусть значение будет любого типа, мы должны его хранить где-нибудь, чтобы мы могли использовать его во всей консоли / скрипте. Имена переменных в 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow