четверг, 17 июня 2010 г.

vSphere PowerCLI: урок 4

В этом уроке я продолжу рассказ о фундаментальных понятиях PowerShell. Хотя все это должны быть про PowerCLI, без понимания PowerShell ничего вразумительного не может получиться. Впрочем, я попробую включить сюда пару командлетов PowerCLI.

Переменные в 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


<< Предыдущий урок | Следующий урок >>

2 комментария:

  1. и опять вот такое чудо..
    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>

    ОтветитьУдалить
  2. Задание типов для языков третьего поколения к оптимизации памяти имеет отношение, но это не единствнное и может не самое главное. Когда вы задает тип, вы заодно поределяте и действия допустимые с переменной (мможно ли складывать лампочки с апельсинами?), что позволяет отловить часть проблем уже на этапе трансляции, что особенно вжно для кусков, которые должны отрвботать при критических ситуациях.
    Не надо путать подходы для программ из трех строчек и из 3-30 миллионов строчек (да и из 3000). Wasqsq

    ОтветитьУдалить