VMware PowerCLI – это весьма мощный инструмент управления, а всё, что нужно сделать для начала работы с ним - это подключиться к серверу или серверам виртуальной инфраструктуры, которыми могут являться сервер управления vCenter Server, Linux vCenter Server Appliance (vCSA) или ESXi-хост.
Открыв новое окно/консоль PowerCLI, вы увидите в заголовке окна установленную версию PowerCLI.
Первая ваша команда будет Connect-VIServer. В зависимости от вашей конфигурации PowerCLI, вы можете из одной сессии подключиться одновременно к нескольким серверам виртуальной инфраструктуры.
За это отвечает настройка DefaultVIServerMode, которую можно узнать командой Get-PowerCLIConfiguration, по умолчанию она равна Multiple, т.е. позволяет множественные подключения из одной сессии.
Если по какой-то причине у вас она равна Single, то это можно исправить при помощи команды Set-PowerCLIConfiguration.
Вне зависимости от этой настройки, вы всегда можете открыть несколько окон/консолей PowerCLI и из каждой подключиться к отдельному серверу, но, во-первых, это неудобно, держать много открытых консолей, а во-вторых, вам всё равно придётся как-то их различать (какая и куда подключена).
Здесь вам на помощь и придёт очередная функция моего PowerShell-модуля для управления виртуальной инфраструктурой VMware - Vi-Module. Первая статья этой серии с описанием самого модуля находится здесь.
Функция Set-PowerCLITitle. Она очень простая и короткая, но очень полезная. Если VMware использует заголовок окна PowerCLI для «рекламы» версии своего продукта, почему бы нам не использовать это пространство для чего-то более информативного, ведь оно всегда перед глазами и просто обязано содержать что-то полезное?
А что может быть важнее, чем информация о серверах виртуальной инфраструктуры, напротив которых запускаются ваши команды!
Итак, всё, что нужно сделать, это просто запускать мою функцию после каждого изменения статуса подключения, т.е. после каждого использования функций подключения/отключения Connect-VIServer/Disconnect-VIServer. Как я уже говорил, функция очень простая и даже не имеет ни одного параметра.
В заголовке окна вы увидите имя сервера, имя продукта (vCenter или ESXi хост) и его версию. Всё это будет заключено в квадратные скобки.
На следующем примере мы подключимся к ещё одному серверу и после запуска Set-PowerCLITitle, мы увидим оба сервера в заголовке окна.
На этом примере мы видим, что функция Get-VM возвращает нам 1049 ВМ. Но, если мы воспользуемся параметром -Server, то мы увидим, что 61 ВМ зарегистрированы на сервере «****10» и 988 ВМ на «****00».
Отсюда мы делаем очень важный вывод, что по умолчанию все команды PowerCLI запускаются напротив всех подключенных серверов!
Теперь мы отключимся от одного из vCenter и подключимся напрямую к ESXi хосту.
После запуска Set-PowerCLITitle мы ясно видим, что сервер «****00» это vCenter, а «****17» это ESXi хост. Обратите внимание, что cmdlet Connect-VIServer имеет ещё 3 имени (Aliases) - Get-ESX, Get-VC и Get-VIServer.
Не путайте команды Get-ESX и Get-VMHost, первая служит для создания соединения, а вторая для получения информации об объекте ESXi хоста.
Старайтесь избегать прямого подключения к ESXi хосту без особой надобности, особенно одновременно с подключением к серверу vCenter, где этот хост зарегистрирован. В противном случае вы можете создать следующую ситуацию:
Обратите внимание, что ссылка на объект ВМ «****98» возвращена дважды командой Get-VM без использования параметра –Server. В случае с командами Get-, это всего лишь получение неадекватной информации, в случае же с Set-/Add-/Export- и т.д. последствия могут быть непредсказуемыми.
Приучите себя не закрывать окно/консоль PowerCLI, предварительно не отключившись от всех серверов. Проверьте себя при помощи Set-PowerCLITitle.
Дело в том, что при подключении к серверу, на нём выделяются определённые ресурсы под каждое подключение. Эти ресурсы освобождаются под нужды сервера только при «правильном» отключении с помощью Disconnect-VIServer или при рестарте сервисов сервера.
Просто закрывая консоль PowerCLI, вы создаёте потенциальную утечку ресурсов сервера. По моим оценкам, каждое соединение с сервером vCenter «съедает» от 100 до 150 МБ памяти, это не так уж мало.
По поводу параметра–Server, который я неоднократно упоминал - к сожалению, не все команды PowerCLI его поддерживают. С помощью следующего простого кода можно определить, поддерживает ли интересующая вас команда данный параметр:
Следующий код выдаст вам все команды PowerCLI, поддерживающие параметр –Server:
Get-Command -ParameterName server -Module 'VMware*'
Мы видим, что cmdlet Get-VM поддерживает параметр –Server, а вот Add-DeployRule - нет.
С версии PowerCLI 5.5 до версии 6.0 Release 3 ситуация не сильно изменилась - по-прежнему, более 100 команд, а это 25-30%, не позволяют выбрать целевой сервер.
Вооружившись этими знаниями и моей функцией Set-PowerCLITitle, вы точно будете знать, где будут выполняться ваши PowerCLI-команды.
Да, обратите внимание на очень интересный параметр -Menu команды Connect-VIServer. Он будет эффективен при повторных подключениях.