Очень часто мне, как и любому администратору виртуальной инфраструктуры VMware, требуется знать версию того или иного объекта. Это может быть версия VMTools/vHardware виртуальной машины или версия vSphere хоста ESXi или версия VMFS-датастора (продолжите список сами).
И каждый раз вы начинаете судорожно вспоминать, как это делается, где и какой скрипт искать или пускаетесь в поиски по форумам или обращаетесь к доктору Google).
Функция Get-Version раз и навсегда избавит вас от подобных проблем и сэкономит вам уйму времени.
Это очередная функция моего PowerCLI модуля Vi-Module, который вы можете скачать в этом репозитории на GitHub.
Итак, каковы же возможности Get-Version? На данный момент функция «умеет» работать со следующими объектами:
Хосты ESXi
Виртуальные машины
Distributed VSwitches
Датасторы
Серверы vCenter (Windows/VCSA)
PowerCLI framework
Лицензионные ключи
Хосты ESXi
Хосты могут быть переданы функции как с помощью Get-VMHost, так и Get-View:
Не важно какой тип объекта вы передаёте Get-Version, функция всегда возвращает объекты с одними и теми же свойствами:
ProductName - имя объекта.
ProductType - тип объекта (VMHost, Datastore, vCenter и т.д.).
FullVersion - полное наименование версии объекта.
Version - собственно, сама версия.
Особого внимания заслуживает свойство Version. В отличии от первых трёх, свойство Version - это не простой текст, а тоже объект типа [System.Version]:
Это сделано для удобства в сравнении версий. Ведь настоящая версия сама по себе никого не интересует, она имеет смысл в сравнении с какой-то заданной версией.
Например, вы хотите проверить, сколько у вас осталось хостов с версией ниже, чем 5.5 или у скольких из этих хостов ревизия ниже, чем 2456374. Всё очень просто:
Виртуальные машины
У каждой виртуальной машины есть аж 3 важных версии – это версия виртуального железа, версия VMTools (если установлены) и имя + версия операционной системы.
Чтобы вместить это всё в структуру возвращаемого объекта, пришлось сделать так:
ProductName - имя ВМ.
ProductType - операционная система (GuestFullName).
FullVersion - версия железа (v7, v11 и т.д.).
Version - версия VMTools.
Distributed vSwitches
По умолчанию, версия DVSwitch соответствует версии vCenter на котором он был создан, но после миграций у вас могут оставаться DVSwitch предыдущих версий:
С помощью Get-Version их очень просто вычислить:
Датасторы
У самого датастора нет версии, зато есть версия его файловой системы VMFS:
Несколько правил по поводу сравнения версий, а точнее сравнения данных типа [System.Version]. Не зная этих правил, вы можете получить некорректные результаты при сравнении версий!
Допустим, вам надо найти все датасторы с версией VMFS, ниже, чем 5.6. Казалось бы всё просто. Нам с вами понятно, что версия 5.6 > 5.54, и это не обсуждается. Но посмотрите какие результаты выдаст вам PowerShell.
Удивлены? Ещё нет? Хорошо, ну допустим, что 5.6 < 5.54 так как 6 < 54. Добавим ноль, уж 60 точно больше чем 54. А вот сейчас вы точно будете удивлены. Версия 5.60, как и 5.6, меньше чем 5.54!!!
Избежать подобных «недоразумений» можно двумя способами: либо сравнивать не с версией 5.6, а допустим с 5.61 или 5.59, либо сравнивать мажорную и минорную версии по-отдельности (как вы видите на предыдущей картинке). На мой взгляд, второй способ надёжней и красивей, выбор за вами.
Серверы vCenter
Для определения версии vCenter, нужно предварительно подключиться к нему/ним с помощью Connect-VIServer и потом запустить Get-Version с параметром -vCenter.
PS C:\> Get-Version –vCenter
Для демонстрации я воспользуюсь ещё одной функцией Vi-Module модуля - Set-PowerCLITitle:
Обратите внимание, что кроме пяти серверов vCenter, я ещё подключен напрямую к хосту ESXi, который тоже в списке.
Как бонус в дополнение вы получите версию PowerCLI вашего компьютера (всегда будет последней строчкой). В случае если вы ещё никуда не подключены, вы получите только версию PowerCLI:
В свойстве ProductType вы также получите информацию о платформе сервера vCenter (Windows или Appliance):
Если по какой-либо причине происходит разрыв соединения с vCenter, например, таймаут сессии, проблемы с сетью, рестарт vCenter и т.д., вы получите следующую картину:
Чтобы это исправить, переподключитесь к vCenter. Это сделано для того, если за время отключения сессии вы успели проапгрейдить ваш vCenter.
Лицензионные ключи
Для получения версии лицензионных ключей нужно запустить Get-Version с параметром -LicenseKey:
PS C:\> Get-Version –LicenseKey
Здесь вас также ждёт небольшой бонус, в свойстве FullVersion вы получите статистику использования данного ключа в формате [использованные/установленные единицы лицензирования], например, [160/200CPU].
При работе с лицензионными ключами нужно учитывать одну особенность. Если вы в одной сессии подключены и к серверу vCenter, и к хосту/хостам ESXi, на которых установлен один из ключей с этого vCenter, то такие ключи вы увидите дважды, но с разной статистикой:
Не забудьте просмотреть примеры и справку по функции:
Если вы считаете, что я обошёл вниманием какой-либо важный объект VMware, версию которого важно знать, пишите в комментарии, обязательно добавлю. Ну, и кому интересна английская версия статьи, могут прочитать её здесь.