Показать полную графическую версию : Задача c клонированием VM.
Mishanya3624
05-12-2013, 23:50
Приветствую друзья!
Собственно в создании скриптов я полный ноль, посему без вашей помощи никак.
Задача следующая:
Есть 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
Немного поправил скрипт:
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
Если делаю команду на импорт такой :
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 на которую необходимо сделать импорт...
Mishanya3624, код на форуме оформляется тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).
Mishanya3624
06-12-2013, 15:22
Поправил, жду теперь помощи.
По поводу:
И еще такой вопрос при остановке и удалении 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
Ну что никто, никак, ничем не поможет?
Mishanya3624
11-12-2013, 13:14
При записи строки импорта:
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
Разговор с самим собой:)))
Mishanya3624
26-12-2013, 16:13
Ну неужели никто не работал с VM через Power shell......
Molchune
26-12-2013, 23:24
не совсем понятно. BOSS_MAIN это работающая машина? или держите как шаблон для BOSS_1 И BOSS_2.
По поводу ошибки
То ругается так:
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
BOSS_MAIN это эталон для двух других, то есть после удаления BOSS_1 и BOSS_2 должны создатся опять же они, но в точной копии, как BOSS_MAIN, в каком состоянии она будет все равно, хоть всегда в выключенном.
По ошибке, я уже разобрался ему не нравилось дублирование -vm
Molchune
28-12-2013, 03:03
Ну вот попробовал сегодня... и проблем вообще не нашел..
Исходное состояние
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
То есть получается, что 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
Попробовал запустить через повер шел это:
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
Цитата 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
Все из-под WinServer 2008R2
Постоянно, чтобы каждый раз было с чего копировать, то есть на BOSS_MAIN будет стоят настроенная винда, а BOSS_1 BOSS_2 это будут ПК тестестировщиков и вот, когда они убьют ее, то по нажатию кнопки их машины удалятся и создадутся заново с BOSS_MAIN и снова тестить пока опять не убьют систему.
Molchune
30-12-2013, 10:18
Все из-под WinServer 2008R2 »
К сожалению нет Win2008R2 чтобы проверить. Но у меня отрабатывает норм все.
Постоянно, чтобы каждый раз было с чего копировать, то есть на BOSS_MAIN будет стоят настроенная винда »
Ну да настроил машину экспортнул ее. все дальше виртуалка тебе эта не нужна удаляешь ее. а копии он уже будет из импортированной папки делать. Единственное что, это если надо шаблон перенастроить, то надо будет опять импортировать ее перенастроить и заново экспортировать. Более долгий процесс.
Mishanya3624
30-12-2013, 10:24
Ок, попробую поднять на виртуалке 2012R2 и там попробовать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.