Данный текст – памятка самому себе, и инструкция для тех, кто с данным скриптовым языком не работал, но хочет (или нужда заставляет).
Эта инструкция не претендует на полноту и академичность. Рекомендации даются те, до которых додумался автор – а не самые лучшие на всем свете и во все времена. Кстати, советы и комментарии приветствуются.
Эта инструкция претендует на быстрое освоение азов и начало использования мощного механизма автоматизации vSphere (и View, и много чего еще).
Итак - чтобы начать получать профит от PowerShell для vSphere, выполняем простую последовательность шагов:
1) Устанавливаем необходимое
1.а) На Win7\2008 только PowerCLI
1.б) На WinXP\2003 еще и PowerShell предварительно
1.в) Вспомогательные сторонние утилиты
2) Настраиваем профиль для удобной работы
3) Узнаем и запоминаем азы
3) Узнаем и запоминаем азы
3.а) С чего начать
3.б) Куда посмотреть
3.в) Основные конструкции и хинты
4) Где взять готовое
4.а) Ссылки
4.б) Onyx
А теперь по пунктам.
1) Устанавливаем необходимое
Нам потребуются PowerShell (если еще не установлен) –> PowerCLI
Опционально – сторонние вспомогательные утилиты, я предложу PowerGUI и PowerTab.
Опционально – сторонние вспомогательные утилиты, я предложу 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.
Поэтому сразу идем на 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.
Затем идем на 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 - как раз редактор для написания скриптов. Пользуюсь теперь им.
Эта штука дает удобный интерфейс для написания скриптов, подсветка синтаксиса, подстановка параметров и переменных.
Без затей устанавливаем.
UPD. В составе актуальной версии posh поставляется продукт PowerShell ICE - как раз редактор для написания скриптов. Пользуюсь теперь им.
Эта штука дает удобный интерфейс для написания скриптов, подсветка синтаксиса, подстановка параметров и переменных.
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 мы вместо поочередного добивания подходящих вариантов наблюдаем более удобную картину:
Выбрать нужную команду или там параметр объекта теперь проще.
Обратите внимание – команда Import-Module загрузила нам PowerTab только до закрытия окна PowerCLI. Для постоянного использования этой утилиты следует добавить ее импорт в профиль – см. п.2.
Подробности про модули в общем см. тут - about_Modules.
Для начала маленькая иллюстрация:
Начните писать какую-нибудь команду в консоли 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 мы вместо поочередного добивания подходящих вариантов наблюдаем более удобную картину:
Выбрать нужную команду или там параметр объекта теперь проще.
Обратите внимание – команда Import-Module загрузила нам PowerTab только до закрытия окна PowerCLI. Для постоянного использования этой утилиты следует добавить ее импорт в профиль – см. п.2.
Подробности про модули в общем см. тут - about_Modules.
2) Настраиваем профиль для удобной работы
Профиль – это скрипт posh, выполняемый при запуске.
В нем удобно определять всякие постоянно используемые мелочи.
Это функции, переменные, псевдонимы команд, настройки цветов консоли и пр.
Здесь я приведу пример своего профиля, с неполными комментариями – что не прокомментировано здесь будет затронуто в п.3.
Итак, нам нужен профиль.
Сначала проверяем, существует он у нас или нет. Выполним команду
test-path $profile
Если на выходе false, то профиля нет, и его надо создать. Для этого выполните команду
new-item -path $profile -itemtype file -force
Теперь профиль создан.
Когда профиль создан, или уже существовал, отредактируем его. Выполните команду
notepad $profile
В блокноте откроется файл (в первый раз он будет пуст) – и сюда следует добавить нужные нам вещи.
Вот что добавлено у меня:
Теперь при старте powerCLI данные команды будут выполняться автоматически. Конкретно в моем случае –
В нем удобно определять всякие постоянно используемые мелочи.
Это функции, переменные, псевдонимы команд, настройки цветов консоли и пр.
Здесь я приведу пример своего профиля, с неполными комментариями – что не прокомментировано здесь будет затронуто в п.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 мы на экране видим следующее:
То
важно понимать – команда показала нам не текст с именем ВМ, статусом ВКЛ\ВЫКЛ и пр, а команда получила список объектов (тут – виртуальных машин), и на экран вывела некоторые свойства этих объектов, примерно так:
объект_ВМ1. Имя объект_ВМ1. Статус
объект_ВМ2. Имя объект_ВМ2. Статус
объект_ВМ3. Имя объект_ВМ3. Статус
…
Это означает две вещи – мы можем использовать любое свойство объекта, который получил наш командлет, и мы можем объект\объекты с вывода одного командлета подавать на вход другому.
Например – возьмем банальный CD-ROM виртуальной машины. Для получения информации о нем существует командлет Get-CDDrive.
Ему на вход следует подать список ВМ - о приводах которых (или одной которой) надо вывести информацию. Прочтя краткий хелп, мы видим, что у этой команды есть параметр –VM. Пробуем:
Get-CDDrive -VM *
Видим список подключенных cd-rom, и что именно подключено, для любой ВМ (тут звездочка – классический символ подстановки вида «любой набор символов», т.е. тут мы выбираем ВМ с любым именем, т.е. выбираем все ВМ):
Вывод не особо читаем, но форматирование займемся чуть позже.
А можно сделать чуток по другому:
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
покажет список свойств ВМ. Например, нас интересует свойство 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
то мы вспомним, что информация на выходе не особо читаема Улучшим это.
Для улучшения вывода можно применить командлет Select-Object, позволяющий вывести на экран указанные свойства, примерно так:
командлет1 | командлет2 | Select-Object название_свойства1, название_свойства2.
А откуда взять названия свойства? Из Get-Member:
Или, в некоторых ситуациях, может пригодиться добавить в конце | Format-Table –Wrap
как видно – длинные строки были отформатированы при помощи переноса строки.
Разбор csv файла
Сам файл c:\vms.csvname,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.StringBuilderfor($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.а) Ссылки
- Готовые фишки под posh - именно общие PowerShell, не PowerCLI.
http://powershell.com/cs/blogs/tips/ - На vmware.com -
Getting Started with PowerCLI 4.1 – Automating Your vSphere Environment. Рекомендую - много примеров простых действий. - Крайне рекомендуется ознакомиться с документом
vSphere PowerCLI Administration Guide – немного основ и куча примеров действий. Что важно – можно увидеть а какие действия и с какими объектами в принципе возможны. Всего 36 страниц. - Sample Code – еще примеры.
- На форуме VMware
http://communities.vmware.com/community/vmtn/vsphere/automationtools/powercli?view=documents - Как из posh скрипта сделать exe
http://cosmoskey.blogspot.com/2010/09/powershell-script-to-generate.html http://communities.vmware.com/thread/302331?start=0&tstart=100 - Постер с быстрыми подсказками
http://communities.vmware.com/thread/302399
его версия, которую можно распечатать без принтера A3
http://www.vladan.fr/new-compact-powercli-poster-printable-at-home/
4.б) Onyx
Для того, чтобы продолжить, очень полезной может оказаться утилита Onyx. Очень, очень прикольная штука, хоть пока и не в статусе релиза. Примерный план получения profit'а:1) По ссылке скачали архив, распаковали, запустили исполняемый файл. Нажали звездочку, и указали адрес vCenter.
2) Клиентом vSphere подключаемся на ту машину и порт, где запущен Onyx.
3) В окне Onyx нажимаем пиктограмму начала записи, и в клиенте vSphere выполняем действия, которые мы хотели бы заскриптовать. В окне Onyx появится готовый скрипт для этого! Левая из пиктограмм сохранит содержимое окна в файл скрипта PowerShell.
Те скрипты, на которых экспериментировал я, выполнялись и делали нужную работу без дополнительных усилий с моей стороны. В Onyx я сохранил скрипт под именем ps_start_SQL_VM.ps1. В PowerCLI я запустил файл с таким именем. Все.
Конец.
Пост велик! :) Спасибо...
ОтветитьУдалитьОтличный пост.
ОтветитьУдалитьСамое оно для начала изучения PowerCLI.
Респект!
удачи :)
ОтветитьУдалитьМиша, несколько дополнений:
ОтветитьУдалить- Для работы Powershell 2 необходим Net Framework 2 SP1 (недавно проверено в боях)
- В текущий пакет PowerShell входит очень неплохой редактор PowerShell ISE (возможно, не для всех версий Windows)
- Ограничение в if-констукции: можно задать только одно условие
- Очень выручает оператор сравнения "-like" - поиск по простому шаблону - когда не помнишь точное название VM или чтобы не вписывать весь Datastore ID.
- Вывод в файл осуществалется ">" либо ">>" ( не заметил в тексте )
- Экпорты Export-csv, Export-clixml, convertto-html - назначение понятно по названию.
bond_jimme
спасибо!
ОтветитьУдалитьбудет минутка впишу в пост.
Респект за пост! Самое оно для начала. Я столкнулся с такой проблемой - никак не мог подсоедениться к вцентру, постоянно выдавались на ошибки в имени или пароле. В результате чего сменил пароль на более простой, без использования спец-символов типа #$, все сразу чудесным образом заработало.
ОтветитьУдалитьрискну предположить что надо было строку пароля как-то экранировать. ну не как-то, кавычками это делается.
ОтветитьУдалитьно сам не изучал вопрос.
спасибо.
Михаил, во первых спасибо за пост! Это идеальное место для начала изучения PowerCli.
ОтветитьУдалитьВозможно в профиль стоит добавить первой строкой:
add-pssnapin VMware.VimAutomation.Core
ну или хотя бы упомянуть про нее где-нибудь в статье.
В этом случае тот же PowerGUI Script Editor, начинает нормально выполнять команды из профиля, а не ругаться на их отсутствие. Да и вообще, vm команды будут работать всегда, а не только при запуске специального ярлыка.
спасибо, добавил.
ОтветитьУдалитьзамечательный пост.
ОтветитьУдалитьподсказка насчет get-members супер полезна.
Я тут только второй день как начал овладевать основами powercli и стандартного Powercli admin guide не хватает для понимания что и зачем используется в команде. Больше всего обекураживало непонимание каким образом можно увидеть все методы объекта через get-view
попробовал ваш get-member и все встало на свои места
$vm = get-vm VMNAME | get-view
$vm | gm
и сразу видишь все то, чего возможно не хватает в стандартных cmdlet
пожалуйста помогите дураку.
ОтветитьУдалитьнаписал скрипту в VMware vSphere PowerCLI окошке все пашет замечательно
загнал все в фаил *.ps1 но он при запуске поднимается в Виндовс повер шелл которий команд от VMware vSphere PowerCLI не понимает.
как мне с этим боротся ?
сделать так, чтобы команды PowerCLI подгружались в этом сеансе PowerShell.
Удалитьв сам скрипт или в профиль powershell допишите
add-pssnapin VMware*
огромное спасибо. все заработало просто замечательно
УдалитьЭтот комментарий был удален администратором блога.
ОтветитьУдалитьЭтот комментарий был удален администратором блога.
ОтветитьУдалить