Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Задача c клонированием VM. (http://forum.oszone.net/showthread.php?t=273497)

Mishanya3624 05-12-2013 23:50 2267736

Задача c клонированием VM.
 
Приветствую друзья!
Собственно в создании скриптов я полный ноль, посему без вашей помощи никак.
Задача следующая:
Есть VM на HyperV назовем ее BOSS_MAIN
Так же есть еще две VM BOSS_1 and BOSS_2
Необходимо написать скрипт, при запуске которого будут останавливаться и удаляться BOSS_1 и BOSS_2, далее делать копию с VM BOSS_MAIN и заново создавать с нее BOSS_1 BOSS_2
Вопрос следующий можно ли просто скопировать BOSS_MAIN и создать две VM, либо надо сначала экспортировать BOSS_MAIN потом создать две голые VM и только потом импортировать на них экспорт BOSS_MAIN?
Собственно нашел у вас следующий скрипт и немного подредактировал, чтобы сразу создавались VM без запроса параметров и перед созданием остановил, удалил BOSS_1 BOSS_2 и сделал экспорт BOSS_MAIN:

Stop-VM -vm BOSS_1
Remove-VM -vm BOSS_1
Stop-VM -vm BOSS_2
Remove-VM -vm BOSS_2

export-vm -vm BOSS_MAIN -path D:\backups\VM -copystate -wait -force

# Variables
$SRV1 = "BOSS_1"

$SRAM = 512MB

$SRV1VHD =40GB

$VMLOC = C:\HyperV

$Network1 = "Network1"

# Configure Hyper-V Virtual Network
remove-vmswitch $Network1 -force -erroractionsilentlycontinue
new-vmprivateswitch $Network1

# Create Virtual Machines
MD $VMLoc -erroractionsilentlycontinue
new-vm $SRV1 -path $VMLoc
new-vhd -vhdpaths $VMLoc\$SRV1 -size $SRV1VHD
add-vmdisk -vm $SRV1 -controllerid 0 -lun 0 -path $VMLoc\$SRV1
get-vm $SRV1 | add-vmdrive -controllerid 1 -lun 0 -dvd
get-vm $SRV1 | set-vmmemory -memory $SRAM
get-vm $SRV1 | add-vmnic -virtualswitch $Network1

$SRV1 = "BOSS_2"

$SRAM = 512MB

$SRV1VHD =40GB

$VMLOC = C:\HyperV2

$Network1 = "Network2"

# Configure Hyper-V Virtual Network
remove-vmswitch $Network2 -force -erroractionsilentlycontinue
new-vmprivateswitch $Network2

# Create Virtual Machines
MD $VMLoc -erroractionsilentlycontinue
new-vm $SRV2 -path $VMLoc
new-vhd -vhdpaths $VMLoc\$SRV2 -size $SRV1VHD
add-vmdisk -vm $SRV1 -controllerid 0 -lun 0 -path $VMLoc\$SRV1
get-vm $SRV2 | add-vmdrive -controllerid 1 -lun 0 -dvd
get-vm $SRV2 | set-vmmemory -memory $SRAM
get-vm $SRV2 | add-vmnic -virtualswitch $Network2

#Дальше, как мне сделать обратный импорт BOSS_MAIN на эти две виртуалки? предположу, что так:
Import-VM -vm BOSS_1 -path D:\backups\VM -copystate -wait -force
Import-VM -vm BOSS_2 -path D:\backups\VM -copystate -wait -force
#Я же правильно понимаю, что при импорте, я так же, как и при экспорте указываю ту же директорию, или же я должен указать директорию новых VM?

Mishanya3624 06-12-2013 09:22 2267865

Немного поправил скрипт:

Код:

Stop-VM -vm BOSS_1
Remove-VM -vm BOSS_1
Stop-VM -vm BOSS_2
Remove-VM -vm BOSS_2

export-vm -vm BOSS_MAIN -path F:\VM\export\BOSS_MAIN\export -copystate -wait -force


# Variables
$SRV2 = "BOSS_1"

$SRAM = 512MB

$SRV2VHD = 40GB

$VMLOC = "F:\VM\export\BOSS_1"

$Network2 = "Network2"

# Configure Hyper-V Virtual Network
remove-vmswitch $Network2 -force -erroractionsilentlycontinue
new-vmprivateswitch $Network2

# Create Virtual Machines
MD $VMLoc -erroractionsilentlycontinue
new-vm $SRV2 -path $VMLoc
new-vhd -vhdpaths $VMLoc\$SRV2 -size $SRV2VHD
add-vmdisk -vm $SRV2 -controllerid 0 -lun 0 -path $VMLoc\$SRV2
get-vm $SRV2 | add-vmdrive -controllerid 1 -lun 0 -dvd
get-vm $SRV2 | set-vmmemory -memory $SRAM
get-vm $SRV2 | add-vmnic -virtualswitch $Network2

$SRV3 = "BOSS_2"

$SRAM = 512MB

$SRV3VHD = 40GB

$VMLOC = "F:\VM\export\BOSS_2"

$Network3 = "Network3"

# Configure Hyper-V Virtual Network
remove-vmswitch $Network3 -force -erroractionsilentlycontinue
new-vmprivateswitch $Network3

# Create Virtual Machines
MD $VMLoc -erroractionsilentlycontinue
new-vm $SRV3 -path $VMLoc
new-vhd -vhdpaths $VMLoc\$SRV3 -size $SRV3VHD
add-vmdisk -vm $SRV3 -controllerid 0 -lun 0 -path $VMLoc\$SRV3
get-vm $SRV3 | add-vmdrive -controllerid 1 -lun 0 -dvd
get-vm $SRV3 | set-vmmemory -memory $SRAM
get-vm $SRV3 | add-vmnic -virtualswitch $Network3

Import-VM -vm BOSS_1 -path F:\VM\export\BOSS_MAIN\export -copystate -wait -force
Import-VM -vm BOSS_2 -path F:\VM\export\BOSS_MAIN\export -copystate -wait -force

Собственно он все делает, кроме импорта в этом проблема, ну и в целом, может по коду какие замечания поправки будут?

И еще такой вопрос при остановке и удалении VM он меня спрашивает, точно ли я хочу провести это действие, можно ли как то это обойти, чтобы он сразу останавливал и удалял их без запроса?
Еще вопрос: после того, как он создает заново VM BOSS_1 BOSS_2 , то начинает ругаться при создании VHD мол, что уже такой жесткий существует, это что получается, при удалении VM VHD не удаляется? это надо отдельно прописать, чтобы VHD удалялось после удаления VM?

Mishanya3624 06-12-2013 10:09 2267882

Если делаю команду на импорт такой :
Код:

Import-VM -vm BOSS_1 -path 'F:\VM\export\BOSS_MAIN\export\BOSS_MAIN\Virtual Machines\37057F64-D1E1-48FD-80B6-1B28ED948AB2.exp' –Copy -GenerateNewId[/b]
То ругается так:
Import-VM : Не удается найти параметр, соответствующий имени параметра "vm".
D:\ps1.ps1:56 знак:14
+ Import-VM -vm <<<<  BOSS_1 -path 'F:\VM\export\BOSS_MAIN\export\BOSS_MAIN\Virtual Machines\37
057F64-D1E1-48FD-80B6-1B28ED948AB2.exp' -Copy -GenerateNewId
    + CategoryInfo          : InvalidArgument: (:) [Import-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Import-VM

Странно, что он ругается на BOSS_1 ведь я должен указать VM на которую необходимо сделать импорт...

Iska 06-12-2013 13:21 2267971

Mishanya3624, код на форуме оформляется тэгом [code].

Mishanya3624 06-12-2013 15:22 2268060

Поправил, жду теперь помощи.
По поводу:
Код:

И еще такой вопрос при остановке и удалении VM он меня спрашивает, точно ли я хочу провести это действие, можно ли как то это обойти, чтобы он сразу останавливал и удалял их без запроса?
Нашел ответ, но пока еще не доработал до совершенства, перед:
Код:

Stop-VM -vm BOSS_1
Remove-VM -vm BOSS_1
Stop-VM -vm BOSS_2
Remove-VM -vm BOSS_2

Ставить: echo |Y

Mishanya3624 08-12-2013 22:14 2269123

Ну что никто, никак, ничем не поможет?

Mishanya3624 11-12-2013 13:14 2270583

При записи строки импорта:
Код:

Import-VM BOSS_1 -path 'F:\VM\export\BOSS_MAIN\export\BOSS_MAIN\Virtual Machines\37057F64-D1E1-48FD-80B6-1B28ED948AB2.exp'
Появляется такая ошибка в PowerShell:
Код:

Get-WmiObject : Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
C:\Program Files\modules\hyperV\VM.ps1:331 знак:40
+                $VSMgtSvc=Get-WmiObject <<<<  -ComputerName $server -Namespace $HyperVNamespa
ce -Class "MsVM_virtualSystemManagementService"
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCom
  mand

Нельзя вызвать метод для выражения со значением NULL.
C:\Program Files\modules\hyperV\VM.ps1:332 знак:54
+                $Result=$VSMgtSvc.importVirtualSystem <<<< ($path,(-not $ReuseIDs.Ispresent)
)
    + CategoryInfo          : InvalidOperation: (importVirtualSystem:String) [], RuntimeExcept
  ion
    + FullyQualifiedErrorId : InvokeMethodOnNull

Не удается преобразовать значение NULL в тип "ReturnCode" из-за недопустимых значений перечисле
ния. Укажите одно из следующих значений перечисления и повторите попытку. Возможны следующие зн
ачения перечисления: "OK, JobStarted, Failed, AccessDenied, NotSupported, Unknown, Timeout, Inv
alidParameter, SystemInUse, InvalidStateForOperation, IncorrectDataType, SystemNotAvailable, Ou
tOfMemory, FileNotFound".
C:\Program Files\modules\hyperV\VM.ps1:337 знак:64
+                else      {Write-Verbose ([ReturnCode]$result. <<<< returnValue)
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

Службы RPC и DCOM - сервера запущены...
Что может быть?

Mishanya3624 12-12-2013 09:09 2271162

Разговор с самим собой:)))

Mishanya3624 26-12-2013 16:13 2278875

Ну неужели никто не работал с VM через Power shell......

Molchune 26-12-2013 23:24 2279124

не совсем понятно. BOSS_MAIN это работающая машина? или держите как шаблон для BOSS_1 И BOSS_2.
По поводу ошибки
Цитата:

Цитата Mishanya3624
То ругается так:
Import-VM : Не удается найти параметр, соответствующий имени параметра "vm".
D:\ps1.ps1:56 знак:14
+ Import-VM -vm <<<< BOSS_1 -path 'F:\VM\export\BOSS_MAIN\export\BOSS_MAIN\Virtual Machines\37
057F64-D1E1-48FD-80B6-1B28ED948AB2.exp' -Copy -GenerateNewId »

get-help Import-VM -Online
не нашел там параметра '-vm'

Mishanya3624 27-12-2013 14:25 2279326

BOSS_MAIN это эталон для двух других, то есть после удаления BOSS_1 и BOSS_2 должны создатся опять же они, но в точной копии, как BOSS_MAIN, в каком состоянии она будет все равно, хоть всегда в выключенном.
По ошибке, я уже разобрался ему не нравилось дублирование -vm

Molchune 28-12-2013 03:03 2279589

Ну вот попробовал сегодня... и проблем вообще не нашел..

Исходное состояние
BOSS_MAIN - Делаем шаблон, делаем экспорт виртуалки в отдельную папку. Удаляем виртуальную машину.
далее.. то что ниже.

читать дальше »

Код:

$ImportPath="D:\Hyper-V\Export_VM\BOSS_MAIN\BOSS_main\Virtual Machines\E55453FE-1382-4786-9717-25BA9C36248A.XML"
$BOSSFolder="D:\Hyper-V\virtualMashine\tmp"
Stop-VM -Name BOSS_1 -TurnOff
Stop-VM -Name BOSS_2 -TurnOff
Remove-VM -Name BOSS_1 -Force
Remove-VM -Name BOSS_2 -Force
del $BOSSFolder\BOSS_1 -Recurse -Force
del $BOSSFolder\BOSS_2 -Recurse -Force
Import-VM -Path $ImportPath  -copy  -VhdDestinationPath $BOSSFolder\BOSS_1\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_1\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_1
Rename-VM -Name BOSS_MAIN -NewName BOSS_1
Import-VM -Path $ImportPath -copy  -VhdDestinationPath $BOSSFolder\BOSS_2\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_2\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_2
Rename-VM -Name BOSS_MAIN -NewName BOSS_2


Mishanya3624 28-12-2013 09:43 2279635

То есть получается, что BOSS_MAIN удаляется? А если мне необходимо, чтобы она всегда была, мне надо будет помимо BOSS_1 и BOSS_2 также еще и импортировать ее же в BOSS_MAIN?
Код:

export-vm BOSS_MAIN -path D:\backups\VM -copystate -wait -force
Remove-VM -Name BOSS_MAIN -Force
$ImportPath="D:\Hyper-V\Export_VM\BOSS_MAIN\BOSS_main\Virtual Machines\E55453FE-1382-4786-9717-25BA9C36248A.XML"
$BOSSFolder="D:\Hyper-V\virtualMashine\tmp"
Stop-VM -Name BOSS_1 -TurnOff
Stop-VM -Name BOSS_2 -TurnOff
Remove-VM -Name BOSS_1 -Force
Remove-VM -Name BOSS_2 -Force
del $BOSSFolder\BOSS_1 -Recurse -Force
del $BOSSFolder\BOSS_2 -Recurse -Force
Import-VM -Path $ImportPath  -copy  -VhdDestinationPath $BOSSFolder\BOSS_MAIN\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_MAIN\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_MAIN
Import-VM -Path $ImportPath  -copy  -VhdDestinationPath $BOSSFolder\BOSS_1\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_1\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_1
Rename-VM -Name BOSS_MAIN -NewName BOSS_1
Import-VM -Path $ImportPath -copy  -VhdDestinationPath $BOSSFolder\BOSS_2\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_2\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_2
Rename-VM -Name BOSS_MAIN -NewName BOSS_2


Mishanya3624 28-12-2013 11:19 2279658

Попробовал запустить через повер шел это:
Код:

export-vm BOSS_MAIN -path D:\bacupVM -copystate -wait -force
Remove-VM BOSS_MAIN -Force
$ImportPath="D:\bacupVM\BOSS_MAIN\Virtual Machines\37057F64-D1E1-48FD-80B6-1B28ED948AB2.exp"
$BOSSFolder="F:\VM\export\BOSS_MAIN\Virtual Machines"
Stop-VM BOSS_1 -TurnOff
Stop-VM BOSS_2 -TurnOff
Remove-VM BOSS_1 -Force
Remove-VM BOSS_2 -Force
del $BOSSFolder\BOSS_1 -Recurse -Force
del $BOSSFolder\BOSS_2 -Recurse -Force
Import-VM -Path $ImportPath  -copy  -VhdDestinationPath $BOSSFolder\BOSS_MAIN\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_MAIN\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_MAIN
Import-VM -Path $ImportPath  -copy  -VhdDestinationPath $BOSSFolder\BOSS_1\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_1\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_1
Rename-VM BOSS_MAIN -NewName BOSS_1
Import-VM -Path $ImportPath -copy  -VhdDestinationPath $BOSSFolder\BOSS_2\hdd -GenerateNewId -SnapshotFilePath $BOSSFolder\BOSS_2\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_2
Rename-VM BOSS_MAIN -NewName BOSS_2

Он ругается так(не понимает команды):
Код:

PS D:\> .\ps1
Stop-VM : Не удается найти параметр, соответствующий имени параметра "TurnOff".
D:\ps1.ps1:5 знак:24
+ Stop-VM BOSS_1 -TurnOff <<<<
    + CategoryInfo          : InvalidArgument: (:) [Stop-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Stop-VM

Stop-VM : Не удается найти параметр, соответствующий имени параметра "TurnOff".
D:\ps1.ps1:6 знак:24
+ Stop-VM BOSS_2 -TurnOff <<<<
    + CategoryInfo          : InvalidArgument: (:) [Stop-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Stop-VM

Import-VM : Не удается найти параметр, соответствующий имени параметра "copy".
D:\ps1.ps1:11 знак:35
+ Import-VM -Path $ImportPath  -copy <<<<  -VhdDestinationPath $BOSSFolder\BOSS_MAIN\hdd -Gene
rateNewId -SnapshotFilePath $BOSSFolder\BOSS_MAIN\Snapshots -VirtualMachinePath  $BOSSFolder\BO
SS_MAIN
    + CategoryInfo          : InvalidArgument: (:) [Import-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Import-VM

Import-VM : Не удается найти параметр, соответствующий имени параметра "copy".
D:\ps1.ps1:12 знак:35
+ Import-VM -Path $ImportPath  -copy <<<<  -VhdDestinationPath $BOSSFolder\BOSS_1\hdd -Generat
eNewId -SnapshotFilePath $BOSSFolder\BOSS_1\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_1
    + CategoryInfo          : InvalidArgument: (:) [Import-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Import-VM

Имя "Rename-VM" не распознано как имя командлета, функции, файла скрипта или выполняемой програ
ммы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего по
вторите попытку.
D:\ps1.ps1:13 знак:10
+ Rename-VM <<<<  BOSS_MAIN -NewName BOSS_1
    + CategoryInfo          : ObjectNotFound: (Rename-VM:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Import-VM : Не удается найти параметр, соответствующий имени параметра "copy".
D:\ps1.ps1:14 знак:34
+ Import-VM -Path $ImportPath -copy <<<<  -VhdDestinationPath $BOSSFolder\BOSS_2\hdd -Generate
NewId -SnapshotFilePath $BOSSFolder\BOSS_2\Snapshots -VirtualMachinePath  $BOSSFolder\BOSS_2
    + CategoryInfo          : InvalidArgument: (:) [Import-VM], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Import-VM

Имя "Rename-VM" не распознано как имя командлета, функции, файла скрипта или выполняемой програ
ммы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего по
вторите попытку.
D:\ps1.ps1:15 знак:10
+ Rename-VM <<<<  BOSS_MAIN -NewName BOSS_2
    + CategoryInfo          : ObjectNotFound: (Rename-VM:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Molchune 28-12-2013 23:25 2280018

Цитата Mishanya3624:
Он ругается так(не понимает команды): »


Какая версия Hyper-V и PS.
Я пробовал на Windows 8 и Windows Hyper-V Server 2012 R2

читать дальше »

Код:

PS C:\Windows\system32>>>>> $PSVersionTable
 
Name                          Value                                                                       
----                          -----                                                                       
PSVersion                      3.0                                                                         
WSManStackVersion              3.0                                                                         
SerializationVersion          1.1.0.1                                                                     
CLRVersion                    4.0.30319.18051                                                             
BuildVersion                  6.2.9200.16628                                                             
PSCompatibleVersions          {1.0, 2.0, 3.0}                                                             
PSRemotingProtocolVersion      2.2




Цитата Mishanya3624:
То есть получается, что BOSS_MAIN удаляется? А если мне необходимо, чтобы она всегда была, мне надо будет помимо BOSS_1 и BOSS_2 также еще и импортировать ее же в BOSS_MAIN? »


А зачем чтобы она была постоянно?

Ну можно и постоянно.

Mishanya3624 30-12-2013 08:51 2280586

Все из-под WinServer 2008R2
Постоянно, чтобы каждый раз было с чего копировать, то есть на BOSS_MAIN будет стоят настроенная винда, а BOSS_1 BOSS_2 это будут ПК тестестировщиков и вот, когда они убьют ее, то по нажатию кнопки их машины удалятся и создадутся заново с BOSS_MAIN и снова тестить пока опять не убьют систему.

Molchune 30-12-2013 10:18 2280604

Цитата:

Цитата Mishanya3624
Все из-под WinServer 2008R2 »

К сожалению нет Win2008R2 чтобы проверить. Но у меня отрабатывает норм все.

Цитата:

Цитата Mishanya3624
Постоянно, чтобы каждый раз было с чего копировать, то есть на BOSS_MAIN будет стоят настроенная винда »

Ну да настроил машину экспортнул ее. все дальше виртуалка тебе эта не нужна удаляешь ее. а копии он уже будет из импортированной папки делать. Единственное что, это если надо шаблон перенастроить, то надо будет опять импортировать ее перенастроить и заново экспортировать. Более долгий процесс.

Mishanya3624 30-12-2013 10:24 2280607

Ок, попробую поднять на виртуалке 2012R2 и там попробовать.


Время: 15:33.

Время: 15:33.
© OSzone.net 2001-