Hyper-V Script: Import/Export Kullanarak Sanal Makinanızı Kopyalayın VMI

by Administrator 19. July 2008 13:18

Microsoft Hyper-V  Hyper-V sunucunuzda var olan sanal makinalarınızı VMI script kullanarak Clone'layabilirsiniz. Örnek Script Aşağıdaki gibidir.

 

 Değiştirmeniz Gereken Değerler;

     MasterVM – Clone'lanacak VM ismi
     Path – Kopyalanacak yol
     NewName – Hangi isimde Clone'layacağı
     HyperVHost – Hyper-V sunucunuzun ismi

param
(
    [
string]$MasterVM = $(Throw "MasterVM required"),
    [
string]$Path = $(Throw "Path required"),
    [
string]$NewName = "VMCopy",
    [
string]$HyperVHost = "localhost"
)


function ProcessWMIJob
{
    param
    (
        [
System.Management.ManagementBaseObject]$Result
    )

    if ($Result.ReturnValue -eq 4096)
    {
        $Job = [WMI]$Result.Job

        while ($Job.JobState -eq 4)
        {
            Write-Progress -Id 2 -ParentId 1 $Job.Caption -Status "Executing" -PercentComplete $Job.PercentComplete
            Start-Sleep 1
            $Job.PSBase.Get()
        }
        if ($Job.JobState -ne 7)
        {
            Write-Error $Job.ErrorDescription
            Throw $Job.ErrorDescription
        }
    }
    elseif ($Result.ReturnValue -ne 0)
    {
        Throw $Result.ReturnValue
    }
    Write-Progress $Job.Caption -Status "Completed" -PercentComplete 100 -Id 2 -ParentId 1
}

#Main Script Body
$VMManagementService = Get-WmiObject -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService -ComputerName $HyperVHost
$SourceVm = Get-WmiObject -Namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='$MasterVM'" -ComputerName $HyperVHost
$a = 0


while ($a -lt 10) {
    write-progress -Id 1 "Cloning Vm's" -Status "Executing" -percentcomplete (($a / 10)*100)
    $tempVMName = "$NewName - $a"
    $VMSettingData = Get-WmiObject -Namespace root\virtualization -Query "Associators of {$SourceVm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVHost
    $VMSettingData.ElementName = $tempVMName

    $Result = $VMManagementService.ModifyVirtualSystem($SourceVm, $VMSettingData.PSBase.GetText(1))
    ProcessWMIJob $Result

    $Result = $VMManagementService.ExportVirtualSystem($SourceVm, $TRUE, "$Path")
    ProcessWMIJob $Result

    $Result = $VMManagementService.ImportVirtualSystem("$Path\$tempVMName", $TRUE)
    ProcessWMIJob $Result

    $a ++
}


write-progress -Id 1 -Completed $TRUE -Activity "Cloning Vm's"
$VMSettingData = Get-WmiObject -Namespace root\virtualization -Query "Associators of {$SourceVm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVHost
$VMSettingData.ElementName = $MasterVM

$Result = $VMManagementService.ModifyVirtualSystem($SourceVm, $VMSettingData.PSBase.GetText(1))
ProcessWMIJob $Result

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen

Son Yorumlar

Comment RSS