Ранее, в статье PowerCLI. Использование Get-View. Часть 2. я упоминал командлет Get-VIObjectByVIView в контексте совместного использования командлетов Get-View и Get-VM.
В данной статье я хочу рассказать про использование данного командлета немного подробнее.
Напомню, что Get-VIObjectByVIView - это командлет, который конвертирует vSphere View object в VIObject.
VIObject - это объект PowerCLI (ВМ, Хост ESXi, датасторе и т.д.)
Но применение Get-VIObjectByVIView не ограничивается только лишь случаями совместного использования командлетов Get-View и Get-VM.
Для начала немного теории.
В VMware vSphere имеется application programming interface (API), что переводится как программный интерфейс приложения.
API (application programming interface) - это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.
В VMware PowerCLI есть два способа использования VMware vSphere API.
1. Использование свойства ExtensionData, имеющееся у большинства объектов PowerCLI. Свойство ExtensionData является прямой ссылкой на vSphere API-объект, связанный с объектом PowerCLI.
2. Использование командлета GetView для извлечения объекта API vSphere, связанного с объектом PowerCLI.
Для лучшего понимания VMware vSphere API и Get-VIObjectByVIView рассмотрим пример получения информации о хранилищах, используемых для Heartbeat Datastore.
Примечание: Heartbeat Datastore служит для обработки сбоев в VMware HA.
В свою очередь для комфортной работы с примерами необходимо свободно ориентироваться и перемещаться по объектам, получаемым при выполнении командлетов.
Нам понадобятся командлеты:
1. Get-Member - выводит информацию о свойствах и методах объекта.
-MemberType - позволяет фильтровать вывод.
Мы будем использовать Properties и Method.
2. Format-List - показывает объект в виде списка, в котором каждое свойство имеет метку и отображается в отдельной строке. Он позволяет использовать подстановочные знаки в качестве значения параметра Property. Это дает возможность отображать подробные сведения.
Format-List -Property * - выводит все значения.
Format-List имеет аллиас fl.
Итак, давайте исследуем кластер.
Не густо, прямо скажем.
Идем дальше, посмотрим что нам вообще доступно
Вероятно больше информации нас ожидает в ExtensionData.
Вывод данного командлета показывает нам что-то не очень понятное.
Снова обращаемся к
Вывод слишком большой, поэтому применим фильтры.
и затем
Да, все самое вкусное находится именно в ExtensionData.
В выводе $Cluster.ExtensionData | Get-Member -MemberType Properties мы видим поле Summary
Теперь вернемся опять в $Cluster.ExtensionData | Get-Member -MemberType Properties, и на этот раз обратимся к полю Datastore
Опять что-то непонятное. И вот теперь используем Get-VIObjectByVIView
Теперь все красиво.
В качестве эксперимента применим Get-VIObjectByVIView к $Cluster.ExtensionData.Summary.
Упс, ошибка.
Все дело в ManagedObjectReference (MOR).
ManagedObjectReference (MOR) - это не что иное, как типизированный идентификатор (строка) для объекта (хоста, виртуальной машины, хранилища данных ...) на ESX или в VC, уникальном для каждого экземпляра VC. PowerCLI не может напрямую выполнять операции с этими объектами, а только посредством application programming interface (API), о котором я говорил выше. А вот уже результат операции мы можем конвертировать в формат PowerCLI c помощью Get-VIObjectByVIView.
Поскольку тип ExtensionData.Summary - не VMware.Vim.ManagedObjectReference[] Datastore {get;}, а VMware.Vim.ComputeResourceSummary Summary {get;}, т.е. изначально в формате PowerCLI, то при попытке конвертации мы получаем ошибку.
Теперь, видя в выводе командлета Get-Member строку ManagedObjectReference мы будем знать, что это означает и как можно привести выходные данные в читабельный вид.
Выше я обещал разобрать пример получения информации о хранилищах, используемых для Heartbeat Datastore. Но он сам по себе не очень легкий, поэтому я решил ограничиться примером с ExtensionData.Datastore.
В данной статье я хочу рассказать про использование данного командлета немного подробнее.
Напомню, что Get-VIObjectByVIView - это командлет, который конвертирует vSphere View object в VIObject.
VIObject - это объект PowerCLI (ВМ, Хост ESXi, датасторе и т.д.)
Но применение Get-VIObjectByVIView не ограничивается только лишь случаями совместного использования командлетов Get-View и Get-VM.
Для начала немного теории.
В VMware vSphere имеется application programming interface (API), что переводится как программный интерфейс приложения.
API (application programming interface) - это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.
В VMware PowerCLI есть два способа использования VMware vSphere API.
1. Использование свойства ExtensionData, имеющееся у большинства объектов PowerCLI. Свойство ExtensionData является прямой ссылкой на vSphere API-объект, связанный с объектом PowerCLI.
2. Использование командлета GetView для извлечения объекта API vSphere, связанного с объектом PowerCLI.
Для лучшего понимания VMware vSphere API и Get-VIObjectByVIView рассмотрим пример получения информации о хранилищах, используемых для Heartbeat Datastore.
Примечание: Heartbeat Datastore служит для обработки сбоев в VMware HA.
В свою очередь для комфортной работы с примерами необходимо свободно ориентироваться и перемещаться по объектам, получаемым при выполнении командлетов.
Нам понадобятся командлеты:
1. Get-Member - выводит информацию о свойствах и методах объекта.
-MemberType - позволяет фильтровать вывод.
Мы будем использовать Properties и Method.
2. Format-List - показывает объект в виде списка, в котором каждое свойство имеет метку и отображается в отдельной строке. Он позволяет использовать подстановочные знаки в качестве значения параметра Property. Это дает возможность отображать подробные сведения.
Format-List -Property * - выводит все значения.
Format-List имеет аллиас fl.
Не густо, прямо скажем.
Идем дальше, посмотрим что нам вообще доступно
Вероятно больше информации нас ожидает в ExtensionData.
Вывод данного командлета показывает нам что-то не очень понятное.
Снова обращаемся к
Вывод слишком большой, поэтому применим фильтры.
и затем
Да, все самое вкусное находится именно в ExtensionData.
В выводе $Cluster.ExtensionData | Get-Member -MemberType Properties мы видим поле Summary
Теперь вернемся опять в $Cluster.ExtensionData | Get-Member -MemberType Properties, и на этот раз обратимся к полю Datastore
Опять что-то непонятное. И вот теперь используем Get-VIObjectByVIView
Теперь все красиво.
В качестве эксперимента применим Get-VIObjectByVIView к $Cluster.ExtensionData.Summary.
Упс, ошибка.
Все дело в ManagedObjectReference (MOR).
ManagedObjectReference (MOR) - это не что иное, как типизированный идентификатор (строка) для объекта (хоста, виртуальной машины, хранилища данных ...) на ESX или в VC, уникальном для каждого экземпляра VC. PowerCLI не может напрямую выполнять операции с этими объектами, а только посредством application programming interface (API), о котором я говорил выше. А вот уже результат операции мы можем конвертировать в формат PowerCLI c помощью Get-VIObjectByVIView.
Поскольку тип ExtensionData.Summary - не VMware.Vim.ManagedObjectReference[] Datastore {get;}, а VMware.Vim.ComputeResourceSummary Summary {get;}, т.е. изначально в формате PowerCLI, то при попытке конвертации мы получаем ошибку.
Теперь, видя в выводе командлета Get-Member строку ManagedObjectReference мы будем знать, что это означает и как можно привести выходные данные в читабельный вид.
Выше я обещал разобрать пример получения информации о хранилищах, используемых для Heartbeat Datastore. Но он сам по себе не очень легкий, поэтому я решил ограничиться примером с ExtensionData.Datastore.
Комментариев нет:
Отправить комментарий