Создавайте виртуальные машины из электронной таблицы и скрипта PowerShell.

Опубликовано: 16 Апреля, 2023
Создавайте виртуальные машины из электронной таблицы и скрипта PowerShell.

Несколько дней назад я разговаривал с кем-то, кто рассказал мне о том, как пользователь позвонил ему по телефону и тут же выдал длинный список инструкций о виртуальных машинах, которые им нужно было создать. Он сказал, что сообщил пользователю, что у него нет времени в данный момент, и прислал ему список того, что необходимо. Когда он сказал мне это, мне пришло в голову, что было бы относительно легко создать виртуальную машину из списка или, в данном случае, из электронной таблицы. Итак, давайте посмотрим, как это делается.

Чтобы создать виртуальные машины из электронной таблицы, нам понадобятся две вещи — электронная таблица и простой скрипт PowerShell для создания виртуальных машин на основе данных электронной таблицы.

Создание виртуальных машин с помощью PowerShell

Командлет PowerShell, используемый для создания виртуальных машин, называется New-VM. Если вы когда-либо создавали виртуальные машины с помощью PowerShell, то знаете, насколько сложным может быть этот процесс. Тем не менее, вы можете создать простую виртуальную машину, указав два параметра — имя виртуальной машины и объем памяти, который вы хотите выделить виртуальной машине. Поскольку я хочу показать вам, как создать виртуальную машину из электронной таблицы, не увязая во всех тонкостях командлета New-VM, я буду упрощать и использовать только имя виртуальной машины и объем памяти.

Вы можете увидеть мою исходную таблицу на скриншоте ниже. Взглянув на скриншот, вы заметите, что в нем нет заголовков столбцов. Многим людям нравится определять заголовки столбцов в файле CSV, и этот метод, безусловно, имеет место быть. Однако в данном случае я определяю заголовки столбцов в коде, а не в CSV-файле. Если бы вы добавили заголовки столбцов, сценарий все равно работал бы, но отображал бы ошибку непосредственно перед созданием виртуальных машин, потому что сценарий интерпретировал бы строку заголовка как недопустимую конфигурацию виртуальной машины.

Изображение 14362
После того, как электронная таблица будет завершена, следующим шагом будет ее сохранение в формате CSV. Таким образом, мы можем настроить PowerShell для импорта содержимого электронной таблицы. Вы можете увидеть, как выглядит мой CSV-файл, на скриншоте ниже. Обратите внимание, что файл CSV содержит как строку заголовка, так и данные, которые будут использоваться для создания виртуальных машин.

Изображение 14363 Создание сценария PowerShell

Итак, теперь, когда мы создали электронную таблицу, пришло время приступить к созданию сценария PowerShell. Первое, что должен уметь делать наш скрипт, — это читать CSV-файл. Для этого используется командлет PowerShell Import-CSV.

Конечно, использование файла Import-CSV само по себе ничего не дает. Вы должны сообщить PowerShell, какой файл CSV вы хотите импортировать, и что вы хотите сделать с данными после того, как файл будет импортирован.

Указать имя CSV-файла для импорта очень просто. Вы можете добавить путь и имя файла непосредственно в конец командлета файла Import-CSV. Однако использование данных в CSV-файле требует немного больше творчества.

Одна из вещей, которые мне всегда нравились в PowerShell, — это его гибкость. Обычно есть несколько способов выполнить конкретную задачу, и вы можете использовать тот метод, который имеет для вас наибольшее значение. Эта концепция применяется, когда речь идет об извлечении данных из файла CSV. Есть много разных способов выполнить работу. Многим нравится создавать массив для каждого значения, найденного в файле. Хотя в этом подходе, безусловно, нет ничего плохого, я предпочитаю создавать простой цикл For-EachObject. Вот как выглядит базовая структура цикла:

$List = Import-CSV C:ScriptsVMs.csv -Header 'Имя', 'Память' ForEach($VM в $List) { <создать виртуальную машину> }

На данный момент я использовал <создать виртуальную машину> вместо кода, который фактически создаст виртуальную машину, потому что я еще не показал вам, как это сделать. Прежде чем мы создадим несколько виртуальных машин, давайте посмотрим, что мы делаем до сих пор.

Первая строка кода создает переменную с именем $List. Эта переменная получит полное содержимое указанного CSV-файла. Переключатель -Header дает нам возможность сообщить PowerShell, какие имена заголовков используются.

Вторая строка кода устанавливает цикл. Поскольку каждая строка в CSV-файле представляет собой создаваемую виртуальную машину, я имею в виду каждую строку с переменной с именем $VM. Таким образом, цикл просматривает каждую виртуальную машину ($VM) в списке ($List).

Следующее, что я хочу сделать, это записать значения списка в некоторые переменные. $VM.Name будет представлять текущее имя виртуальной машины, а $VM.Memory — объем памяти. Я просто сопоставляю эти значения с переменными с именами $Name и Memory. Вот код:

$List = Import-CSV C:ScriptsVMs.csv -Header 'Имя', 'Память' ForEach ($VM в $List) { $Name = $VM.Name $Memory = $VM.Memory $Name $Memory }

Когда я запускаю этот код, он выводит результат, показанный ниже. Как видите, код отображает содержимое CSV-файла.

Изображение 14364
Теперь осталось только добавить строку, которая будет создавать виртуальные машины. Вот скрипт с добавленной строкой:

$List = Import-CSV C:ScriptsVMs.csv -Header 'Name', 'Memory' ForEach ($VM в $List) { $Name = $VM.Name $Memory = $VM.Memory New-VM - Имя $Name -MemoryStartupBytes $Memory }

Вы заметите, что я убрал команды $Name и $Memory, так как нет необходимости повторять эти значения.

Вот вывод, сгенерированный при запуске скрипта:

Изображение 14365
Причина, по которой назначенная память в настоящее время равна нулю, заключается в том, что виртуальные машины выключены. Когда виртуальные машины подключены к сети, отображается правильный объем памяти.

Создавайте виртуальные машины — и другие вещи — из электронной таблицы

Это простой пример, но он ясно показывает, что вы можете создавать виртуальные машины из электронной таблицы. Вы можете легко расширить этот метод, указав дополнительные атрибуты виртуальной машины, такие как количество виртуальных ЦП, назначенных VM.