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

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 я запустил файл с таким именем. Все.

Конец.

13 комментариев:

  1. Отличный пост.
    Самое оно для начала изучения PowerCLI.
    Респект!

    ОтветитьУдалить
  2. Миша, несколько дополнений:

    - Для работы Powershell 2 необходим Net Framework 2 SP1 (недавно проверено в боях)
    - В текущий пакет PowerShell входит очень неплохой редактор PowerShell ISE (возможно, не для всех версий Windows)
    - Ограничение в if-констукции: можно задать только одно условие
    - Очень выручает оператор сравнения "-like" - поиск по простому шаблону - когда не помнишь точное название VM или чтобы не вписывать весь Datastore ID.
    - Вывод в файл осуществалется ">" либо ">>" ( не заметил в тексте )
    - Экпорты Export-csv, Export-clixml, convertto-html - назначение понятно по названию.


    bond_jimme

    ОтветитьУдалить
  3. спасибо!

    будет минутка впишу в пост.

    ОтветитьУдалить
  4. Респект за пост! Самое оно для начала. Я столкнулся с такой проблемой - никак не мог подсоедениться к вцентру, постоянно выдавались на ошибки в имени или пароле. В результате чего сменил пароль на более простой, без использования спец-символов типа #$, все сразу чудесным образом заработало.

    ОтветитьУдалить
  5. рискну предположить что надо было строку пароля как-то экранировать. ну не как-то, кавычками это делается.

    но сам не изучал вопрос.

    спасибо.

    ОтветитьУдалить
  6. Михаил, во первых спасибо за пост! Это идеальное место для начала изучения PowerCli.

    Возможно в профиль стоит добавить первой строкой:
    add-pssnapin VMware.VimAutomation.Core
    ну или хотя бы упомянуть про нее где-нибудь в статье.

    В этом случае тот же PowerGUI Script Editor, начинает нормально выполнять команды из профиля, а не ругаться на их отсутствие. Да и вообще, vm команды будут работать всегда, а не только при запуске специального ярлыка.

    ОтветитьУдалить
  7. замечательный пост.
    подсказка насчет get-members супер полезна.
    Я тут только второй день как начал овладевать основами powercli и стандартного Powercli admin guide не хватает для понимания что и зачем используется в команде. Больше всего обекураживало непонимание каким образом можно увидеть все методы объекта через get-view

    попробовал ваш get-member и все встало на свои места

    $vm = get-vm VMNAME | get-view
    $vm | gm

    и сразу видишь все то, чего возможно не хватает в стандартных cmdlet

    ОтветитьУдалить
  8. пожалуйста помогите дураку.
    написал скрипту в VMware vSphere PowerCLI окошке все пашет замечательно
    загнал все в фаил *.ps1 но он при запуске поднимается в Виндовс повер шелл которий команд от VMware vSphere PowerCLI не понимает.
    как мне с этим боротся ?

    ОтветитьУдалить
    Ответы
    1. сделать так, чтобы команды PowerCLI подгружались в этом сеансе PowerShell.
      в сам скрипт или в профиль powershell допишите
      add-pssnapin VMware*

      Удалить
    2. огромное спасибо. все заработало просто замечательно

      Удалить