четверг, 28 апреля 2011 г.

cloud, vcloud, vcloud director, it-grad

Помните, я как-то упоминал про конкретный вариант "облаков" на основе VMware vCloud Director - cloud, vcloud, vcloud director, it-grad?
Серия постов на эту тему пополнилась.

Как приручить облака: примеры практического использования.

воскресенье, 24 апреля 2011 г.

VMware Compliance Checker for vSphere

Один из важных типов документов VMware - это Security Hardering Guide, бест практис по безопасности.

Сегодня их три - для vSphere, View и vCloud Director.

Наличие такого документа - это хорошо. Прочесть его - познавательно, интересно, но, если жесткого требования к безопасности нет - многовато букв.

А вот воспользоваться средством автоматической проверки своей vSphere на соответствие бест практис, притом официальным средством - это намного проще и быстрее.



Так что рекомендую - VMware Compliance Checker for vSphere.
11 МБ, халява, устанавливается и работает быстро, требует лишь указать адрес и учетку для доступа на vSphere.



Windows 2008 as Storage for vSphere

Недавно мне попались на глаза два способа сделать сетевое хранилище из Windows Server 2008.

Во-первых - стал честно бесплатно доступен Microsoft iSCSI target.
  • Устанавливаем его на Windows 2008 R2 Std\Ent\Datacenter 
  • создаем "iSCSI Target" 
  • добавляем "device" - им может быть только файл vhd
  • указываем идентификаторы iSCSI инициаторов серверов ESX(i) на вкладке "iSCSI Initiators" в свойствах таргета.

Все, теперь данный Windows-сервер представляет из себя систему хранения iSCSI.

Во-вторых, на сайте xtravirt стала доступна инструкция по установке NFS службы - NFS Storage Configuration for vSphere using Windows 2008.
  • Добавляем на Windows-сервер роль File Server, 
  • затем роль AD Domain Services
  • а еще мне потребовалось поднять домен - без этого Identity Management for UNIX ставится не стал. Можно ли заставить его завестись не поднимая домен я не разбирался.
  • теперь создаем группу в AD, слегка меняем ее настройки по умлочанию
  • и расшариваем по nfs требуемый каталог:

 Я опробовал оба варианта - с iSCSI target вообще проблем не было, nfs что-то нестабильно работал :( - при попытке мигрировать на него ВМ процесс долго висит и завершается ошибкой.
Может быть, что-то в моем стенде не так срослось.


понедельник, 18 апреля 2011 г.

VDI stress test

Из переписки:

Михаил, добрый день.
..
Если кратко, я создал некоторую утилиту (можно скачать с vdi-sizing.com), которая имитирует пользовательский workload и меряет время различных событий (старт приложений, создание rdp сессии и т.д.). Собственно идея не нова и используется в Login VSI (www.loginconsultants.com) и Microsoft Terminal Services Scalability (tbscript.exe из Windows 2003 resource kit). Мое решение, как мне кажется, работает проще и стабильнее.
 
 В общем-то все довольно просто: внутри ВМ устанавливается программка, которая ждет установления соединения с удаленным контроллером нагрузки (LoadMaster). после этого внутри ВМ начинается нагрузка (старт приложений, создание документов и т.д.). Сам контроллер (LoadMaster) стартует последовательно RDP сессии и устанавливает соединение с программкой внутри ВМ. Он же собирает всю статистику о временах операций (установление RDP соединения, старт приложений и т.д.). Т.е. вся эта система просто эмулирует нагрузку на сервер и попутно меряет user experience (время отклика).

каких-либо whitepapers с результатами пока нету (ну кроме примера полученных результатов http://vdi-sizing.com/documentation/benchmarking-overview) . была идея сравнить VDI решения от Citrix и VMware, если будет интерес со стороны коммьюнити - скорее всего сделаю.
Вообще, меня останавливает муторный процесс benchmark approval у vmware - без него, согласно их eula, нельзя публиковать результаты тестов производительности.

главное хочется понять насколько это интересно тем же системным интеграторам или администраторам (при выборе VDI решения). если интересно, то во-первых планируются измерения. ну а во-вторых, в зависимости от потребностей пользователей, есть примерный список фич, которые можно реализовать (есть здесь http://vdi-sizing.com/contacts)

ESXi 4.1 Scripted Installation

К вопросу об установке ESXi по сети и с файлом ответов, используя Windows Deployment Server в качестве сервера сетевой установки - ESXi 4.1 Scripted Installation.
.

vmwClient - android client for vSphere

На форуме VMware порекламировали:
vmwClient is handy and intuitive Android application purposed for the remote, efficient and secure VMware infrastructure management.

VMware Guided Consolidation, PCI DSS

Еще немного обзоров заинтересовавшего меня в других русскоязычных блогах.

I

В составе дистрибутива vCenter поставляется продукт VMware Guided Consolidation.

Довольно бесполезная штука. Призван он собирать данные по нагрузке на физические сервера, и выдавать результаты анализа этих данных, мол "надо его виртуализовать, или ну его нафиг".

Самая большая претензия - к примитивности анализа, с относительно доступным и несравненно более мощным VMware Capacity Planner герой обсуждения даже рядом не стоял.

Однако, может быть и ему можно найти применение - если не устраивает его вариант анализа собранных данных, может попробовать самому их проанализировать?

А как получить к ним доступ, и что за данные вообще собираются, см. Что хранится в базе VMware Guided Consolidation?

II

И еще интересная заметка (или может быть даже забавная...врочем, скорее грустная :-)) - Опыт проектов виртуализации.

III

И еще, узкоспециализированная такая заметка. Есть стандарт PCI DSS. Подробностей я не знаю, но поскольку за последнее время меня регулярно спрашивали о применимости его к инфраструктуре VMware,  я делаю вывод что для кого-то эта аббревиатура - не пустой звук.
Так вот - Выполнение требований стандарта PCI DSS 2.0 при обработке информации в виртуальной среде.

Ericom HTML5 Client for VMware View.

Некоторое время назад компания Ericom объявила о запуске бета-тестирования клиента для VMware View на основе HTML5.

Типа - достаточно вооружиться современным бразуером - и ты можешь подключаться на рабочий стол View.

Я на этот бета тест даже записался, и бету мне дали - но вот времени попробовать не хватило.

Зато я знаю у кого хватило ;-)

Обзор на русском - Ericom HTML5 Client for VMware View.

ESXi install from usb

Решение для довольно узкой задачи - создать загрузочную флешку с дистрибутивом ESXi.

Есть пара нюансов, но у меня получилось. Смотрите:
1) Скачиваем утилиту UNetbootin, Universal Netboot Installer. Однако, внимание!, с последней версией у меня не заработало - при старте установщика ESXi выдавало ошибку “mboot.c32: not a COM32R image”. А вот с версией unetbootin-windows-494 все ок.

2) запускаем загруженный файл, и выбираем какой iso на какую флешку лить:

Недолгое время идет процесс переноса дистрибутива, на вопрос о перезатирании файла я отвечал утвердительно.

3) В общем-то, все, можно проверять флешку в деле:

Однако, еще пара моментов может представлять для нас интерес.

Во первых, кому-то из вас будет удобно на флешку добавить файл ответов.
Во вторых, кому-то будет  удобно добавить драйверы под неподдерживаемое изначально железо.

Я попробовать это не успел, но проблем быть не должно. См. Install ESXi 4.1 from a USB stick

Для общего развития может быть полезен мой давний пост на схожую тему - про файлы ответов ESX и ESXi -ESX | ESXi kickstart.

Ну а для отладки было бы удобно флешку тестировать в виртуалке - но вот беда - ВМ в продуктах VMware не умеют загружаться с USB накопителей. На помощь придет специальный live-cd, см.VMware Workstation VM USB boot
.
 

воскресенье, 17 апреля 2011 г.

VM backup with memory dump

Из переписки:
Михаил, добрый день!
Надеюсь, что следующая информация будет для Вас интересна..
В связи с ограниченным бюджетом и небольшими размерами ИТ-инфраструктуры в ближайшем будущем планируем использовать бесплатный ESXi. И сразу же столкнулись с отсутствием вменяемых средств резервного копирования. Широко известный скрипт ghettoVCB.sh выполняет бэкап дисков, но имеет недостаток - он не сохраняет состояние памяти.. Был проведён тщательный анализ различного ПО и в результате был разработана технология, позволяющая делать бэкап с сохранением состояния памяти, т.е. восстанавливается не только диски VDMK, но и дамп оперативной памяти, в итоге получаем полное состояние системы на момент создания копии. С технологией Вы можете ознакомиться по ссылке:
Бэкап ВМ на ESXi с сохранением памяти, рабочая схема

Цитата из инструкции по ссылке:
Столкнулся с тем, что для ESXi'я практически отсутствуют бесплатные решения для организации резервного копирования ВМ. Наиболее приемлемый вариант - скрипт ghettoVCB.sh, который обладает серьёзным недостатком - он лишь бэкапит виртуальные диски, память при этом не сохраняется. Восстановление с такого бэкапа равносильно тому, как будто бы работа сервера была прервана кнопкой Reset, что чревато и не всегда приемлемо.

Предлагаемая схема создания бэкапов эффективно обходит данный недостаток, позволяя создавать резервные копии вместе с сохранением состояния памяти. Восстановление с такого бэкапа равносильно восстановлению со снепшота, т.е. машина возвращается в состояние на момент создания резервной копии.

thx камрад Egros.

организационное

Как-то так получилось, что последние пару недель я был занят, и до блога руки не доходили.
Что-то мне подсказывает, что большинство из читателей отлично себе представляет, как это "как-то так" бывает :)

Однако когда пару дней назад мне пришло письмо
"Михаил, а все ли у вас нормально, а то блог не обновляется мы волнуемся"
я понял, что пора хоть немного времени найти :-)
Спасибо за заботу, коллеги.

Также  большое спасибо тем, кто номинировал меня на vExpert 2011 - я не благодарил каждого лично, сорри, позвольте выразить благодарность здесь.
Технически, все vExpert 2010 автоматически номинированы на следующий год,
но неделю получать письма-оповещения об очередной номинации меня любимого было ацки приятно.

Спасибо еще раз.

Буду стараться быть полезным и далее.

P.S. раз пост получился больше организационным, то чтоб два раза не вставать:

коллеги, у сервиса blogspot, на котором я хостю блог, какое-то время назад появилась система защиты от спама в комментах.
К сожалению, качеством она похвастаться не может - о том, что какой-то комментарий попал в спам я могу узнать лишь зайдя в соответствующий раздел админки - а привычки заходить туда регулярно у меня нет.
Так что если вы не видите своего комментария - черканите мне об этом, дело в неотключаемом спам-фильтре, что-то удалять руками я перестал несколько лет назад.

P.P.S. Тоже самое относится и к письмам мне - пару писем в месяц я из спама стабильно достаю. Так что если я вам не ответил за сутки-двое - письма я не читал, и 100% дело в спам-фильтре. Смело пишите еще раз!

среда, 6 апреля 2011 г.

PowerShell Reference guide

Предыстория: мне недавно обломилась подарочная карта на Amazon, аж на 100$.

Решил пустить шальные деньги на то, что за свои вряд ли собрался бы покупать.



Эта книга обошлась баксов в 60, с удивившей меня скоростью доставки (дней пять с момента начала продаж).

Помните мой недавний пост про азы PowerShell и PowerCLI?

Он - примерно на 5 вордовских страниц.

А в доставленной сегодня мне книге этих страниц 700!!!

- пост с мобильного устройства, сорри за краткость и опечатки.

воскресенье, 3 апреля 2011 г.

vSphere Troubleshooting Management Issues


Выложили схему диагностики и решения проблем vSphere - интерактивная MindMap в pdf - vSphere Troubleshooting Management Issues.

Еще подобная карта доступна для Update Manager.

vShield Manager login failed

Слегка смахивает на анекдот.

С разницей пару дней и у меня и в переписке -
свежеимпортированный vShield Manager не дает авторизоваться в веб-интерфейсе заведомо правильными учетными данными (login failed).

Нагуглены были последовательно следующие два шаманства:
1) сделать процедуру erase database
2) Импортировать заново

Мне комбинация этих методов помогла, а потом мне показали ссылку на статью в базе знаний VMware со слегка забавной, на мой взгляд, информацией (cannot log in to the vShield Manager web user interface by using default credentials after initial import from OVF):
Проблема.
Не могу авторизоваться в веб-интерфейсе свежеимпортированного vShield Manager.
Решение.
Такое бывает если vShield Manager был помещен на не очень быстрое хранилище. Дайте ему ЛУН побыстрее и все будет ок.

:-)
Просто для справки - у меня не сразу заработало на RAID 10 из четырех SCSI дисков - не самая медленная комбинация. (Нагрузки с других ВМ не было, ребилд был завершен.) 

На всякий случай вкратце о чем речь.

У VMware в линейке продуктов присутствует линейка продуктов защиты:
  • vShield Zones;
  • vShield Edge with Port Group Isolation;
  • vShield App;
  • vShield Endpoint;
Какой функционал для чего предполагается

    Если слегка углубиться в подробности что это и зачем:
    С сайта VMware можно скачать vShield Zones\Manager
    vShield Manager – vAppliance, управлялка. Стандартной процедурой (FIle -> Delpoy OVF Template) его следует загрузить на vSphere.

    После этого через консоль этой ВМ настраиваем параметры IP, через веб-интерфейс настраиваем интеграцию с vCenter, через элементы управления vShield, появившиеся в интерфейсе клиента vSphere инициируем установку vShield Zones на каждый сервер ESX(i).

    vShield Zones это брендмауэр, в его правилах можно указывать source IP, destination IP, source port, destination port, and service. Лицензией на его использование обладает любой владелец vSphere Advanced, Enterprise или Enterprise Plus.
    Настройка правил vShield Zones


    Реализован он в виде ВМ, т.е. на каком-то одном сервере ESX(i) у нас будет работать vShield Manager, и на каждом ESX(i) будет работать vShield Zone.
    Первый управляет вторыми.

    Так вот, когда у нас есть произведены вышеописанные действия, трафик всех ВМ может обрабатываться правилами брендмауэра vShield Zones.


    А если мы укажем дополнительные лицензии, то vShield Zones внезапно обретет супердополнительные способности, и превратится еще и в vShield App.

    vShield App позволит нам создавать правила не только для групп портов, но и для отдельных портов, и даст возможность получать данные анализа - что за трафик ходил через интересующий нас порт.



    vShield Edge with Port Group Isolation - предоставляет такие сервисы как DHCP, VPN, NAT, and Load Balancing.
    Как можно заметить в иллюстрации выше, он предоставляется под использование вместе с VMware vCloud Director,

    Ну а vShield Endpoint – "дырка в гостя". Это тот самый механизм, который позволяет осуществлять схемы "антивирус в одной ВМ сканирует память и диски двадцати других ВМ на этом хосте." Для реализации такой схемы со стороны VMware требуется vShield Endpoint (насколько я понимаю, Endpoint это название лицензии, дающей право использовать т.н. VMSafe API), и потребуется сам антивирус от партнера VMware.

    Сложная картинка, призванная проиллюстрировать крутость Endpoint


    Кстати, о поддержке соответствующих API недавно заявил Касперский (правда, о сроках реализации молчок).

    А вот тут можно прочесть про ввод в эксплуатацию этого хозяйства на примере продукта от TrendMicro - Как установить Trend Micro Deep Security?.





    суббота, 2 апреля 2011 г.

    VMFS recovery


    Задумал я благое дело, а оказалось что играю в капитана очевидность.
    Из переписки:
    Михаил, добрый день!

    Извините, что отвлекаю, но можно один вопрос  по виртуализации vmware esxi.

    Имеется host под vmware esxi 4.1, к нему посредством FC подключена SAN.

    На SAN'е создан раздел 5Тб и ранее подключен к хосту как datastore “SAN”, но с размером 2Тб vmfs (тоесть не полный размер LUN'а).

    По великой случайности его удалили с хоста из Datastore…

    Существует ли какая либо возможность его восстановить (подмонтировать, подключить)?

    Так как при стандартных средствах ESXi считает что данный раздел is blank и предлагает его форматировать…, а там же данные.
    Спустя какое-то время:
    ...некие манипуляции
    На хосте из под vsphere client “Rescan storage”  и, о чудо J, раздел SAN как и был ранее уже отобразился без  запуска мастера создания datastore.

    Всё, делаем browse datastore, видим свой vmdk файлик, грузим виртуалку с подмапленным datastore, проверяем данные, все на месте.

    Думаю, нам просто с этим очень сильно повезло. Повезло, что на самом сторадже был всего один LUN, был всего один раздел, раздел был создан на максимум 2Тб и начинался с начала стораджа.

    Не повезло только, что пароль root'а знали все админы, и которым знать его не нужно J
    В общем, хотел поделиться рецептом восстановления, но оказалось что уже есть соответствующая статья базы знаний: http://kb.vmware.com/kb/1002281.

    Так что тут просто перевод, но эти действия я у себя опробовал, и успешно.

    Допустим, у нас есть VMFS-хранилище, на котором расположены файлы ВМ (рис.1):

    Рис.1. Пока все хорошо
    Допустим, случилось страшное - кто-то хотел сделать это хранилище недоступным для одного из серверов ESX(i), но вместо настройки презентования\маскировки на системе хранения этот кто-то нажал кнопку Delete. Раздел VMFS оказался удален.

    Что делать? Как восстановить удаленный VMFS, и вернуть расположенные на нем виртуальные машины?

    Начать стоит со сбора информации о LUN, с которого был удален раздел VMFS:
    Рис.2. Командная строка

    Рис.3. Графический интерфейс

    Нам нужно узнать идентификатор диска\LUN, с которого был удален раздел VMFS. Обычно идентификаторы начинаются с naa.xxxxxxxxx, у меня же идентификатор eui.951237a2c49752c9.

    Теперь запускаем fdisk, примерно вот так:
    fdisk -l /vmfs/devices/disks/eui.951237a2c49752c9

    затем
    fdisk /vmfs/devices/disks/eui.951237a2c49752c9

    Теперь аккуратно проходим последовательность шагов:

    • n -> Enter
      для создания раздела
    • p -> Enter
      для указания что раздел primary
    • 1 -> Enter
      для указания номера раздела
    • Enter
      первый цилиндр по умолчанию
    • Enter
      последний цилиндр по умолчанию
    • t -> Enter
      для указания идентификатора раздела
    • fb -> Enter
      эти две буквы - идентификатор раздела VMFS
    Теперь надо указать выравнивание раздела. Если ранее раздел был создан из графического интерфейса, то он был выровнен по границе 128. Так необходимо сделать и сейчас:
    • x -> Enter
      для перехода в режим эксперта
    • b -> Enter
      для начала выравнивания раздела
    • 1 -> Enter
      укажем что нас интересует раздел 1
    • 128 -> Enter
      укажем смещение
    • w -> Enter
      зафиксируем изменения
    Теперь, вроде бы, надо выполнить
    vmkfstools -V 

    и запустить Rescan datastores на сервере ESX(i).

    У меня ранее удаленный раздел VMFS нашелся в целости и невредимости.

    thx Алексею.

    PowerShell + VMware = PowerCLI. How-to

    clip_image001
    Данный текст – памятка самому себе, и инструкция для тех, кто с данным скриптовым языком не работал, но хочет (или нужда заставляет).
    Эта инструкция не претендует на полноту и академичность. Рекомендации даются те, до которых додумался автор – а не самые лучшие на всем свете и во все времена. Кстати, советы и комментарии приветствуются.
    Эта инструкция претендует на быстрое освоение азов и начало использования мощного механизма автоматизации vSphere (и View, и много чего еще).
    Итак - чтобы начать получать профит от PowerShell для vSphere, выполняем простую последовательность шагов:
    1) Устанавливаем необходимое
    1.а) На Win7\2008 только PowerCLI
    1.б) На WinXP\2003 еще и PowerShell предварительно
    1.в) Вспомогательные сторонние утилиты
    2) Настраиваем профиль для удобной работы
    3) Узнаем и запоминаем азы
    3.а) С чего начать
    3.б) Куда посмотреть
    3.в) Основные конструкции и хинты
    4) Где взять готовое
    4.а) Ссылки
    4.б) Onyx
    А теперь по пунктам.

    1) Устанавливаем необходимое

    Нам потребуются PowerShell (если еще не установлен) –> PowerCLI
    Опционально – сторонние вспомогательные утилиты, я предложу PowerGUI и PowerTab.

    1.а) на Win7\2008 только PowerCLI

    На современных ОС от Майкрософт PowerShell (в тексте иногда будет сокращаться как posh) уже установлен.
    Поэтому сразу идем на http://vmware.com/go/powercli и загружаем последнюю версию PowerCLI.
    Перед установкой запускаем posh и разрешаем выполнение неподписанных скриптов вот такой командой
    Set-ExecutionPolicy RemoteSigned
    или
    Set-ExecutionPolicy Unrestricted
    Первое более правильно с точки зрения формальной безопасности, второе – слегка более комфортно. Я в своей НЕ производственной среде использую второй вариант.
    А теперь устанавливаем PowerCLI. Next, Next, Finish.

    1.б) на WinXP/2003 еще и PowerShell предварительно

    Идем на http://www.microsoft.com/powershell, загружаем себе Windows Management Framework Core (!) – это название пакета, в который входит PowerShell. Вполне вероятно, что posh не установится без .Net Framework 2 SP1.
    Затем идем на http://vmware.com/go/powercli и загружаем последнюю версию PowerCLI.
    Перед установкой запускаем posh и разрешаем выполнение неподписанных скриптов вот такой командой
    Set-ExecutionPolicy RemoteSigned
    или
    Set-ExecutionPolicy Bypass
    Первое более правильно с точки зрения формальной безопасности, второе – слегка более комфортно- меньше подтверждений требуют. Я в своей НЕ производственной среде использую второй вариант.
    А теперь устанавливаем PowerCLI. Next, Next, Finish.

    1.в) вспомогательные сторонние утилиты

    Я предложу пока парочку – PowerGUI и PowerTab.

    PowerGUI

    Загружаем PowerGUI отсюда – http://www.powergui.org.
    Без затей устанавливаем. Я пользуюсь практически только его PowerGUI Script Editor:

    UPD. В составе актуальной  версии posh поставляется продукт PowerShell ICE - как раз редактор для написания скриптов. Пользуюсь теперь им.


    clip_image002
    Эта штука дает удобный интерфейс для написания скриптов, подсветка синтаксиса, подстановка параметров и переменных.

    PowerTab

    UPD. сейчас я этой штукой не пользуюсь, как-то с опытом она стала менее удобной, но как памятку оставлю.

    Для начала маленькая иллюстрация:
    Начните писать какую-нибудь команду в консоли PowerCLI. Например:
    Get-VM
    Но ограничьтесь только  
    Get-V
    И нажмите Tab. Вы увидите, что PowerCLI дописал вам команду до Get-VApp. Нажмите Tab снова – команда поменялась на следующий подходящий вариант (Get-Variable). Так можно Tab’ом перебрать до необходимой нам команды. Запомним такое поведение.
    Загружаем PowerTab отсюда - http://powertab.codeplex.com/.
    Запускаем PowerCLI и выполняем команду:
    $env:PSModulePath
    На выходе получаем что-то вроде:
    C:\Documents and Settings\mmm\Мои документы\WindowsPowerShell\Modules;
    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
    Вот по любому из этих путей скопируйте каталог PowerTab из ранее загруженного архива.
    Теперь в окне PowerCLI выполните команду
    Import-Module PowerTab
    Я на все вопросы нажимал Enter, устанавливая модуль с параметрами по умолчанию.
    Начните писать какую-нибудь команду в консоли PowerCLI. Например:
    Get-VM
    Но ограничьтесь только  
    Get-V
    И нажмите Tab.
    Теперь по нажатию Tab в консоли PowerCLI мы вместо поочередного добивания подходящих вариантов наблюдаем более удобную картину:

    clip_image003
    Выбрать нужную команду или там параметр объекта теперь проще.
    Обратите внимание – команда Import-Module загрузила нам PowerTab только до закрытия окна PowerCLI. Для постоянного использования этой утилиты следует добавить ее импорт в профиль – см. п.2.
    Подробности про модули в общем см. тут - about_Modules.

    2) Настраиваем профиль для удобной работы

    Профиль – это скрипт posh, выполняемый при запуске.
    В нем удобно определять всякие постоянно используемые мелочи.
    Это функции, переменные, псевдонимы команд, настройки цветов консоли и пр.
    Здесь я приведу пример своего профиля, с неполными комментариями – что не прокомментировано здесь будет затронуто в п.3.

    Итак, нам нужен профиль.
    Сначала проверяем, существует он у нас или нет. Выполним команду
    test-path $profile
    Если на выходе false, то профиля нет, и его надо создать. Для этого выполните команду
    new-item -path $profile -itemtype file -force
    Теперь профиль создан.
    Когда профиль создан, или уже существовал, отредактируем его. Выполните команду
    notepad $profile
    В блокноте откроется файл (в первый раз он будет пуст) – и сюда следует добавить нужные нам вещи.
    Вот что добавлено у меня:
    $vc = "vcenter4.vm4.ru" 
     ##адрес сервера vCenter
    $esx1 = "esx1.vm4.ru" 
     ## имя одного сервера ESX
    $esx2 = "esxi2.vm4.ru" 
     ## имя другого сервера ESX
    
    $vccred = Get-VICredentialStoreItem -host $vc -file D:\cred.xml 
    ## Это файл с учетными данными для подключения к vCenter
    
    function pro {notepad $profile} 
     ## Теперь написав "pro" я открываю профиль для редактирования
    
    add-pssnapin VMware*
    ## Для подгрузки командлетов vSphere в стандартный posh
    
    Connect-VIServer $vc -User $vccred.user -Password $vccred.Password 
     ## инициация подключения к vCenter
    
    Import-module PowerTab  
    ## Импорт модуля PowerTab
    
    new-alias -name vm -value Get-VM  
    ## Псевдоним для Get-VM = vm
    
    function vmON {get-vm | ? {$_.PowerState -eq "PoweredOn"}}
    ## функция vmON выводящая список всех включенных ВМ
    
    cd \
    clear 
    

    Теперь при старте powerCLI данные команды будут выполняться автоматически. Конкретно в моем случае –
    • Создается несколько переменных, в частности $vc – мой сервер vCenter.
    • Создается функция pro – этими тремя буквами я вызываю редактирование профиля.
    • Создается псевдоним vm – этими двумя буквами я вызываю команду Get-VM.
    • Набрав vmON я получаю список включенных ВМ. vmON это имя функции, реализующей данную выборку.
    • Загружается модуль PowerTab.
    • Устанавливается соединение с сервером vCenter, авторизация производится учетными данными, ранее сохраненными в файл d:\cred.xml. Кстати - если вы запускаете PowerShell работая в учетной записи Windows, имеющей право на доступ к vCenter, то достаточно выполнить
      Connect-VIServer $vcпри такой команде posh попытается авторизоваться из под текущего пользователя.
    Вот по последнему пункту маленькое отступление – необходимо создать файл-хранилище учетной записи. Для этого выполните команду
    New-VICredentialStoreItem -host $vc -user administrator -Password gfhjkm -File d:\cred.xml

    Однажды созданный, файл раз за разом используется в профиле.
    Этот механизм авторизации использую я – но я не утверждаю, что такой следует использовать вам.

    Про профиль - about_Profiles.

    UPD.
    Как поменять цвета консоли PowerShell - http://habrahabr.ru/blogs/powershell/126965/.

    Появилась рекомендация по ускорению первого выполнения скрипта posh - How to speed-up the execution of the first PowerCLI cmdlet.
    Вроде как .Net что-то там компилирует, в первый раз, поэтому два подряд выполнения одного скрипта могут на порядок отличаться по скорости. Вот для борьбы с этим есть пара действий.

    UPD. У вас есть ярлык для запуска PowerShell, и ярлык для запуска PowerCLI. Они отличаются тем, что второй подгружает командлеты VMware, а первый - нет. Чтобы командлеты VMware подгружались всегда, в профиль стоит добавить
    add-pssnapin VMware*

    UPD. 

    Дополнительные команды.
    http://www.vm4.ru/2011/11/powercli-addon.html

    3) Узнаем и запоминаем азы

    Данный текст - всего лишь памятка, поэтому тут только некоторые основы.

    3.а) С чего начать

    Запустите установленный PowerCLI, и выполните команду

    Get-VM

    эта команда (командлет по правильному) показывает информацию (на это указывает Get в названии) по объектам виртуальные машины (VM в названии).
    По схеме действие-объект построены все или почти все командлеты posh, и часто по названию можно сориентироваться.
    Например, существуют командлеты Start-VM, Export-VMHostProfile и т.п.

    Важно – каждая команда выдает на выходе объект. Когда после Get-VM мы на экране видим следующее:

    clip_image005 То
    важно понимать – команда показала нам не текст с именем ВМ, статусом ВКЛ\ВЫКЛ и пр, а команда получила список объектов (тут – виртуальных машин), и на экран вывела некоторые свойства этих объектов, примерно так:

    объект_ВМ1. Имя   объект_ВМ1. Статус 
    объект_ВМ2. Имя   объект_ВМ2. Статус 
    объект_ВМ3. Имя   объект_ВМ3. Статус


    Это означает две вещи – мы можем использовать любое свойство объекта, который получил наш командлет, и мы можем объект\объекты с вывода одного командлета подавать на вход другому.

    Например – возьмем банальный CD-ROM виртуальной машины. Для получения информации о нем существует командлет Get-CDDrive.
    Ему на вход следует подать список ВМ - о приводах которых (или одной которой) надо вывести информацию. Прочтя краткий хелп, мы видим, что у этой команды есть параметр –VM. Пробуем:  
    Get-CDDrive -VM *
    Видим список подключенных cd-rom, и что именно подключено, для любой ВМ (тут звездочка – классический символ подстановки вида «любой набор символов», т.е. тут мы выбираем ВМ с любым именем, т.е. выбираем все ВМ):

    clip_image006
    Вывод не особо читаем, но форматирование займемся чуть позже.
    А можно сделать чуток по другому:  

    Get-CDDrive –VM (а в скобках не указывать конкретную ВМ или символ подстановки, а вставить командлет делающий выборку виртуальных машин)

    например так:  

    Get-CDDrive - VM (Get-VM)

    На выход получим то же самое (Get-VM ,без параметров возвращает все имеющиеся ВМ).
    Наконец, можно расположить команлеты в обратном порядке – сначала сделать выборку, а потом передать результаты в Get-CDDrive:  

    Get-VM | Get-CDDrive

    эти три варианта идентичны. Обычно лучше использовать последний вариант – удобнее. Сделали одну выборку, затем поставили вертикальную черту «|» - и после нее пишем действия над результатами первой операции – вертикальная черта как раз предписывает передать объекты «по конвейеру».

    Итак – несколько важных фактов:

    1) Командлеты работают над и возвращают как результаты работы объекты.

    2) Обычно мы обращаемся к свойствам объектов.

    3) Объекты можно передавать по конвейеру.

    Осталось понять – а как мне узнать нужный командлет, нужное свойство, и как мне реализовать мелкие фишки – типа форматирования плохочитаемого дефолтного вывода.

    3.б) Куда посмотреть

    У нас есть понимание того, что мы хотим получить. Теперь надо это понимание реализовать в скрипте. Начинаем, вестимо, с команд – какая команда выполняет желаемое?

    Как узнать командлет.

    Первое о чем стоит сказать – можно просто получить список всех возможных команд PowerCLI:
    Get-VICommand
    Так как полный список обычно не нужен, можно сделать фильтрацию по действию или объекту:  
    Get-VICommand | ? { $_.Noun -eq 'VM' }
    Все командлеты выглядящие как “что-то-VM”
    (можно слегка по-другому это вызывать
    get-command -Module vmware* -verb get )

    А следующая команда покажет все командлеты выглядящие как “Get- что-то”
    Get-VICommand | ? { $_.Verb –eq 'Get'}
    Или еще можно вот так:  
    Help *vm*
    Список команд, в названии которых есть подстрока в звездочках.

    Вообще, команда help (она является псевдонимом для командлета Get-Help) очень полезна. Есть разные ключики:
    help Get-VM – краткая справка по командлету  
    help Get-VM –full - полная справка  
    help Get-VM –examples - примеры  
    help Get-VM –online – онлайн справка

    Итак, командлет мы найдем - просто отталкиваясь от ожидаемого имени. Теперь бы разобраться с тем, какую инфу, какие свойства объектов этот командлет нам может дать.

    Свойства

    Самая главная тут команда – Get-Member, или ее псевдоним gm. Этот командлет следует применить после командлета, выдающего объект, чьи свойства нас интересуют. Например конвейер  
    get-vm | get-member

    покажет список свойств ВМ. clip_image007 Например, нас интересует свойство Guest.
    Теперь можно например так  
    (Get-VM ad).Guest
    нам покажут значение этого свойства для ВМ с именем «AD».
    Но там может быть много полей с дополнительными данными. Чтобы увидеть их – повторим итерацию:
    (Get-VM ad).Guest | gm

    А чтобы не просматривать свойства по одному, а увидеть все варианты:
    Get-VM ad | Format-Custom guest -depth 2
    с помощью этой команды мы можем увидеть доступную информацию, а потом обращаться только к нужным полям, например так:  

    (Get-VM ad).guest.vm.harddisks

    Ну и хелп, конечно, никто не отменял.
    Для не информационных комадлетов, таких как Get, а чего-то вроде New-VM, Set-VirtualSwitch и т.п. вариант с Get-Member не прокатит – там придется читать хелп.


    А вот тут приведен скрипт, выполнение которого сформирует csv-файл с данными по параметрам каждого командлета PowerCLI - http://www.lucd.info/2011/03/04/powercli-cmdlet-xref-another-look/

    3.в) Основные конструкции и хинты

    Upd. Get-View

    есть специфический командлет - get-view.
    позволяет получить инфу, иногда недоступную больше никак. Иногда - в более удобном виде\месте чем другими способами.
    вот тут - Use PowerShell to Simplify Access to Data Through PowerCLI - оптимизация работы с ним.

    Выборка объектов по критерию 
    Полезно использовать конструкцию  
    where {$_.Поле оператор_сравнения значение} например  

    get-vm | where {$_.PowerState -eq "PoweredOn"}

    Мне больше нравится писать не where, а знак вопроса:
    get-vm | ? {$_.PowerState -eq "PoweredOn"}

    В этих двух конструкциях вы видите «$_». Это – указание на объект, переданный на вход. В скрипте из примера что происходит – «Get-VM» без параметров возвращает список вообще всех ВМ, т.е. не объект, а массив объектов. Мы хотим обратиться к каждому объекту из массива, и проверить значение в свойстве PowerState. Переменная «$_» как раз и позволяет обратиться не к свойству конкретного объекта, а к свойству каждого объекта, переданного на вход.

    Операции сравнения

    Введем переменные для иллюстрации:
    $vm_list = “vm1”, “vm2”,”vm3”  
    $vm_test = “vm3”  

    Равно.
    Следующее утверждение неверно  
    $vm_list –eq $vm
    а вот это верно:  
    “vm3” –eq $vm_test  

    Неравно.  
    -ne  

    Большем чем.  
    -gt
    например  if(6 -gt 5) { echo "6 больше чем 5" }  

    Меньше чем.
    -lt  

    Больше равно.  
    -ge

    Меньше равно.  
    -le

    Содержит.
    Следующее утверждение истинно:  
    $vm_list –contains $vm_test  

    Не содержит.  
    $vm_list –notcontains $vm_test  

    А если к любому оператору сравнения вначале приписать букву “c”, то операция сравнения будет выполнена с учетом регистра.  

    “vm3” –сeq $vm_test

    Символы подстановки

    * - что угодно

    [ab]* - строка начинающаяся с a ИЛИ b

    ? – любой один символ

    Использование:

    Get-VM  *

    Get-VM viewdesktop?

    UPD. из комментариев.:

    Еще может быть полезен оператор сравнения "-like" - поиск по простому шаблону - когда не помнишь точное название VM или чтобы не вписывать весь Datastore ID.

    Вывод нужных свойств объектов

    Если вернутся к срипту, показывающему данные CD-ROM всех наших ВМ:
    Get-VM | Get-CDDrive

    то мы вспомним, что информация на выходе не особо читаема clip_image006[1] Улучшим это.
    Для улучшения вывода можно применить командлет Select-Object, позволяющий вывести на экран указанные свойства, примерно так:

    командлет1 | командлет2 | Select-Object название_свойства1, название_свойства2.

    А откуда взять названия свойства? Из Get-Member: clip_image010

    Или, в некоторых ситуациях, может пригодиться добавить в конце | Format-Table –Wrap

      image

    как видно – длинные строки были отформатированы при помощи переноса строки.

    Разбор csv файла

    Сам файл c:\vms.csv
    name,host,datastore
    vmt1
    ,esxi2.vm4.ru,iSCSI_main_100GB
    vmt2
    ,esxi2.vm4.ru,iSCSI_main_100GB
    vmt3
    ,esxi2.vm4.ru,iSCSI_main_100GB
    заносим файл в переменую:
    $vmcsv = import-csv C:\vms.csv

    Используем его вот такой конструкцией:

    foreach ($line in $vmcsv)     

          { new-vm -Name $line.name -vmhost $line.host -datastore $line.datastore}

    Запуск такого скрипта создаст мне три виртуальные машины, на указанно хосте, с указанными именами и на указанном хранилище. Прочие параметры так же можно явно указать, при необходимости. 

    Организация циклов

    $str = New-Object System.Text.StringBuilder
    for($i=0; $i -lt 5; $i++)
           { $str = $str.Append([String]::Format("{0} ", $i)) }  

    echo $str.ToString()

    Здесь мы определили строковую переменную $str, в начале она пуста.
    Затем начали цикл for, определили переменную $i, используем ее как счетчик.
    Пока $i меньше 5 к переменной $str добавляем пробел и значение $i на текущем этапе.
    После завершения цикла на экран будет выведено строковое значение $str, это будет
    1 2 3 4.
    Пример с if else уже был:

    if(6 -gt 5) { echo "6 больше чем 5" }

    В if может быть только одно условие. 

    Сортировка

    Для сортировки применяется конструкция sort-object. Например, для сортировки виртуальных машин по тому, на каком хосте они работают, надо выполнить такую цепочку:
    Get-VM | Sort-Object Host
    здесь Host – свойство объекта виртуальная машина.

    Можно сразу по нескольким полям:
    Get-VM | Sort-Object Host, Name
    тут виртуальные машины сначала будут отсортированы по хостам, внутри этой сортировки – по именам.

    Добавив ключ –descending сортируем в обратном порядке.

    Форматирование

    Format-List - вывод списком свойств объекта 
    Get-vm | sort-object PowerState | format-list -groupby PowerState
    Выбрали все ВМ –> отсортировали по вкл\выкл –> результаты в виде списка, да еще разбитые на подкатегории по статусу ВКЛ\ВЫКЛ ВМ.

    Может быть полезно  

    Get-vm | sort-object PowerState | format-list
    Вывод всех полей.

    Format-Table - вывод таблицей
    Очень полезна следующая конструкция:  
    Get-vm | get-member | format-table –wrap
     Будет с переносом строк текста внутри строк таблицы – без этого длинные примечания нечитабельны

    Format-Wide - вывод списком в несколько столбцов одного свойства.

    Get-vm | format-wide –autosize
     Выводит только имя (по умолчанию), но в несколько столбцов. Удобнее для просмотра длинных списоков. Autosize – он сам выбирает число столбцов. 

    Или сами выбираем не имя, а другое поле объекта  
    Get-vm | format-wide guest

    Format-Custom Форматирование по некому шаблону.
    По умолчанию, я так понимаю, в виде xml.

    UPD. Из комментариев.

    - Вывод в файл осуществалется ">" либо ">>"
    - Экпорты Export-csv, Export-clixml, convertto-html - назначение понятно по названию.

    Запуск самостоятельного скрипта

    Если скрипт лежит в каталоге c:\posh, то вариантов несколько:

    1. В консоли posh указать полный путь  
    c:\posh\script1.ps1

    2. Перейти в этот каталог  
    cd c:\posh
    затем выполнить скрипт  
    ./script1.ps1
    или  
    .\script1.ps1

    3. В переменной окружения path добавить каталог со скриптом
    $env:path += “c:\posh”
    при регулярных обращениях к скриптам из каталога лучше добавить эту строку в профиль.
    Ну или без затей сделать это из графического интерфейса – в свойствах моего компьютера -> вкладка дополнительно -> кнопка переменные среды.

    Затем в консоли вызываем скрипт просто по имени
    script1

    Если хотим выполнить posh-скрипт откуда-то еще, например из планировщика, то как вариант, создаем батник, в него пишем
    %SystemRoot%\system32\windowspowershell\v1.0\powershell.exe -psc "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -command "c:\posh\script1.ps1"

    Звуковая сигнализация

    Можно сделать вот так:  
    $beep = “`a”

    здесь перед a стоит обратная кавычка, которая на клавише с буквой ё.
    Тогда обратившись к этой переменной
    $beep
    вы услышите писк

    А если в переменную занести слегка другое значение
    $beep = “`a`a `a `a `a `a `a `a `a ”
    то услышим много писка.

    Помогает, когда надо привлечь внимание.    

    Как поправить конфиг ВМ
    http://communities.vmware.com/thread/306105?tstart=30    

    Скопировать что-то на VMFS хранилище

    Все хранилища подмонтируются в posh-диск vmstores.
    Так что если выполнить  
    cd vmstores:
    (двоеточие в конце принципиально)
    а затем делать dir\ls и углубиться в структуру каталогов – найдем нужное. затем можно использовать mkdir  для создания каталогов и Copy-DatastoreItem для копирования данных на хранилище.
    Например  
    mkdir test cd ./test Copy-DatastoreItem -Item C:\some_file.ext
    После этого мы обнаружим на VMFS\NFS хранилище каталог test  и соответствующий файл внутри.

    А еще можно сделать  
    cd vi:
    и тогда мы попадем в иерархию vCenter как на posh-диск.
    Можно с помощью dir\ls и cd спускать по структуре пулов\ vApp, хостов\кластеров, и выполняя, например, get-vm, получать на выход только объекты с текущего уровня.  

    Чтобы скрипт не требовал подтверждения
    Добавить -Confirm:$false  

    Как положить файл на файловую систему ESX(i)

    http://communities.vmware.com/message/1630559#1630559
    Вкратце – вызов ssh сессии из powerCLI скрипта.

    Запустить команду в гостевой ОС из сессии PowerCLI к vCenter\ESX(i)

    Есть специальный командлет Invoke-VMScript
    Например, мы массово хотим сделать ipconfig/release. Нам поможет скрипт
    Get-VM | Invoke-VMScript –ScriptText “ipconfig/release” –ScriptType Bat –guestuser DomainAdmin –GuestPassword gfhjkm

    Запускать в госте можно команды PowerShell, CMD и BASH.
    Или передавать путь к скрипту внутри
    Get-VM | Invoke-VMScript –ScriptText “c:\a.bat” –ScriptType Bat –guestuser DomainAdmin –GuestPassword gfhjkm

    Если передаваемая внутрь команда – не PowerShell, то для Windows гостей нужно указать тип - –ScriptType Bat.

    4) Где взять готовое

    4.а) Ссылки


    4.б) Onyx

    Для того, чтобы продолжить, очень полезной может оказаться утилита Onyx. Очень, очень прикольная штука, хоть пока и не в статусе релиза. Примерный план получения profit'а:

    1) По ссылке скачали архив, распаковали, запустили исполняемый файл. Нажали звездочку, и указали адрес vCenter.

    2) Клиентом vSphere подключаемся на ту машину и порт, где запущен Onyx.

    3) В окне Onyx нажимаем пиктограмму начала записи, и в клиенте vSphere выполняем действия, которые мы хотели бы заскриптовать. В окне Onyx появится готовый скрипт для этого! Левая из пиктограмм сохранит содержимое окна в файл скрипта PowerShell.

    Те скрипты, на которых экспериментировал я, выполнялись и делали нужную работу без дополнительных усилий с моей стороны. В Onyx я сохранил скрипт под именем ps_start_SQL_VM.ps1. В PowerCLI я запустил файл с таким именем. Все.

    Конец.