Переменные в PowerShell позволяют сохранять объекты или детали в отдельной области памяти для последующего использования. Без переменных будет практически невозможно выполнять вычисления в PowerShell и даже работать с отфильтрованными данными. Особенно важным использование переменных становится при управлении виртуальной инфраструктурой в PowerCLI при возрастании объемов данных и количества объектов (например ВМ).
Проще говоря, переменная - это выделенная область памяти, в которой вы храните информацию для временного использования. Можно создать переменную, чтобы хранить в ней число "5", а затем после вычислений изменить на "10". На значение переменной можно ссылаться пока существует переменная. Однако переменные не обязательно должны быть числами, можно хранить в них строки текста, дату или даже такой объект как ВМ со всеми ее свойствами.
Вот перечень некоторых типов переменных, которые можно создать в PowerShell:
Shortcut | Data Type |
[datetime] | Дата или время |
[string] | Строка символов |
[char] | Один символ |
[double] | Число с плавающей запятой двойной точности |
[single] | Число с плавающей запятой одинарной точности |
[int] | 32-битное целое число |
[wmi] | Экземпляр или коллекцияWindows Management Instrumentation (WMI) |
[adsi] | Объект Active Directory Service |
[wmiclass] | Класс WMI |
[Boolean] | Истина / Ложь |
Также стоит заметить, что существуют предопределенные переменные, на которые мы обратим внимание в последующих уроках. Помимо этого, все переменные известны и содержатся в провайдере переменных PowerShell, но и об этом позже. Пока будем говорить простым языком.
В других языках разработки часто требуется определить тип переменной перед ее использованием. В PowerShell это не требуется. Командлеты и скрипты PowerShell короткоживущи, в отличие от приложения на C# или VB, например, и поэтому определять тип переменной в этих языках необходимо для оптимизации использования памяти этой переменной.
В PowerShell вы создаете переменную, выбрав для нее имя и добавив в начало символ $. Например:
$myvariable

Затем можно присвоить переменной значение, используя оператор присваивания (поговорим об операторах позже), в данном случае это символ =. Таким образом, чтобы присвоить переменной $myvariable значение "5" необходимо ввести:
$myvariable = 5

Строго говоря, правильным является использование командлета New-Variable для создания переменной, но никто этого не делает из командной строки.
Как только мы создали переменную, мы начали игры с объектами. Создав переменную $myvariable, мы создали объект, и у него есть свойствами и методы (подробнее об объектах в уроке 3). У объектов разных типов различные свойства и методы, поэтому давайте взглянем подробнее.
Сначала создадим переменную, присвоим ей значение и направим в Get-Member (gm), чтобы увидеть ее свойства и методы.
$mystring = "hello"
$mystring | gm

Поскольку эта переменная типа "string" (строка символов), мы можем работать с ней как со строкой символов. Вызовем ее метод ToUpper, который преобразует ее значение к верхнему регистру и вернет его.
$mystring.ToUpper()
$mystring

Вызов этого метода не меняет саму переменную, в чем можно легко убедиться.
ОК, теперь давайте перейдем к PowerCLI части урока и попробуем что-нибудь применить из того, о чем было сказано только что.
Если помните, то мы можем вывести список выключенных ВМ, отфильтровав по свойству PowerState. А теперь попробуем сохранить этот список в переменной.
$myOffVMs = (Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"})

С этой переменной можно работать как с объектом типа ВМ, и чтобы убедиться посмотрим на ее свойства и методы.
$myOffVMs | gm

Если мы вдруг захотим включить эти машины, достаточно направить переменную в командлет Start-VM:
$myOffVMs | Start-VM

<< Предыдущий урок | Следующий урок >>
и опять вот такое чудо..
ОтветитьУдалитьPowerCLI C:\Program Files\VMware\Infrastructure\vSphere PowerCLI> $myOffVMs = (G
et-VM | Where-Object {$_.PowerState -eq "PoweredOff"})
PowerCLI C:\Program Files\VMware\Infrastructure\vSphere PowerCLI> $myOffVMs | gm
Get-Member : Не указан объект для get-member.
В строка:1 знак:14
+ $myOffVMs | gm <<<<
PowerCLI C:\Program Files\VMware\Infrastructure\vSphere PowerCLI>
Задание типов для языков третьего поколения к оптимизации памяти имеет отношение, но это не единствнное и может не самое главное. Когда вы задает тип, вы заодно поределяте и действия допустимые с переменной (мможно ли складывать лампочки с апельсинами?), что позволяет отловить часть проблем уже на этапе трансляции, что особенно вжно для кусков, которые должны отрвботать при критических ситуациях.
ОтветитьУдалитьНе надо путать подходы для программ из трех строчек и из 3-30 миллионов строчек (да и из 3000). Wasqsq