Как Импортировать Неимпортируемое



Проблема, идея и решение Здравствуйте, мои дорогие дети.

Спешу сообщить, что мне в голову пришла еще одна идея, вылившаяся в эту заметку.

Идея, по сути, возникла из проблемы, которую подкинула моя любимая и уважаемая компания Microsoft и их новый продукт Windows Server 2012 R2. И тут я вовсе не иронизирую, они мне очень нравятся.

Но начнем по порядку.

Прежде всего отмечу, что помимо всего прочего я являюсь еще и тренером по всевозможным продуктам Microsoft, и соответственно мне доступны определенные вкусности в виде готовых виртуальных машин для подготовки к курсам в рамках учебного центра.

И вот, собственно, я решил попробовать загнать новый сервер, и, как обычно, развернуть на нем виртуальные машины из одного курса.

Я откачал эти машины, всё подготовил, распаковал.

И тут меня ждало ужасное.

Их категорически отказались ввозить.



Как импортировать неимпортируемое

В общем оказалось, что машины были экспортированы в Windows Server 2008 и не будут импортированы в Windows 2012 R2. Это не поддерживается по определенным техническим причинам.

Что же делать, как они могли, спросите вы, и будете правы.

В моем случае под рукой не оказалось Windows Server 2008 и я начал искать альтернативный вариант. В общем, это просто.

В одном из подкаталогов экспортированной машины находился файл с именем типа {GUID}.

exp. Он представляет конфигурацию экспортированной виртуальной машины.

Именно из-за этого он не импортируется, и мы собираемся это изменить.

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

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

Но не делайте этого руками, верно.

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

А если их больше одного.

В общем решено, будем писать скрипт



Скрипт
На чем мы пишем? Разумеется, на старом добром PowerShell 4, который идет в комплекте с новым сервером и Windows 8.1. С чего начать? Начнем сразу, а как же иначе? Открываем файл, благо там есть тип [xml], что упрощает ковыряние во внутренностях и дебрях экспортируемой конфигурации.

Короче говоря, этот файл содержит набор классов WMI со значениями свойств.

Содержимое этих классов загружается в формате XML и записывается в файл.

Так как я не очень хорошо знаком с этими классами WMI, а также с XLM, мне пришлось помучаться, разбираясь с этими параметрами в лоб.

Вот что произошло:

   

cls $tmp = dir "C:\Program Files\Microsoft Learning\20413\*\*.

exp" -Recurse $tmp | % { # read file [xml]$vm = gc $_.fullname # parsing of the various of different internal XML structures using "properties" notation # CLASSNAME Msvm_VirtualSystemGlobalSettingData $disks = ($vm.DECLARATIONS.DECLGROUP.'VALUE.OBJECT'.

instance | where classname -like "*resource*") | where {$_.property | where name -like "*units*" | where value -eq "disks"} $newVM = @{} # CLASSNAME Msvm_VirtualSystemGlobalSettingData $newVM.Global = $vm.DECLARATIONS.DECLGROUP.'VALUE.OBJECT'.

instance | where classname -like "*Msvm_VirtualSystemGlobalSettingData*" | select -ExpandProperty property | # below passage is most exciting % {$obj=@{}} {$obj["$($_.name)"]=$_.value} {new-object psobject -prop $obj} # disks configuration contains some internal nodes, extractiong them to get the paths to VHDs $newVM.Disks = $disks | % { $prop = @{}; $disk = $_; $disk | select -ExpandProperty property |

Теги: #PowerShell #Poweshell; гипер-v;xml;xpath
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.