zoukankan      html  css  js  c++  java
  • 使用powercli创建模板与克隆虚机

    用powercli练练手,需从实际案例出发,本节将使用powercli写两个demo,一个是创建模板,并根据模板创建新的虚机;另一个demo是克隆虚机。


    【注意】

      1、创建模板与克隆操作只能在vcenter上使用

      2、powercli是 异步任务,因此需等待一个任务完成后,再去执行下一个任务。(使用 -Runasync 与 -ErrorAction stop 类似于linux中的nohup与&的使用)

    一、创建模板并根据模板生成虚机

    $task = Stop-VM win -Confirm:$false -ErrorAction Stop -RunAsync        #停止虚机,并放后台
    while( $task.state -eq "Running" )                          #使用while循环时刻监控上一任务是否结束
    {
        $task = Get-Task -ID $task.id
    }
    
    
    $task1 = New-Template -VM ( Get-VM win2 ) -Name "tp" -Location "nickdc"  -ErrorAction Stop -RunAsync    #根据虚机创建模板
    while( $task1.state -eq "Running" )
    {
        $task1 = Get-Task -ID $task1.id
    }
    
    #根据模板创建虚机
    $task2 = New-VM -Name win3 -Template ( Get-Template tp) -VMHost (Get-VMHost 10.32.2.99) -Datastore (Get-Datastore datastore1) -ResourcePool testpool -ErrorAction Stop -RunAsync
    while( $task2.state -eq "Running" )
    {
        $task2 = Get-Task -ID $task2.id
    }
    
    Start-vm win3                  #开启虚机
    

    二、克隆虚机

    脚本过程:确认虚机名与虚机所在的磁盘--> 连接vcenter-->关闭虚机-->克隆虚机-->开启虚机

    $eap = $ErrorActionPreference
    Try{
        $ErrorActionPreference = 'Stop'
    
    
        # set vm name & clone vm name
        $sourcevmname = "abcd"
        $clonevmname = "123"   
    
        # check vm name 
        $tip1 = Read-Host "make sure source vm name is $sourcevmname , if true , input 'y/Y' "
        $tip2 = Read-Host "make sure clone vm name $clonevmname , if true , input 'y/Y'"
    
        if ( $tip1 -eq "y|Y"  -and $tip2 -eq "y|Y" )
        {
            echo "please make sure vm name "
            exit 1
        }
    
        #connect vcentr
        $vcenterip = "8.8.8.8"
        $user = "administrator@vsphere.com"
        $passwd = "123456"
        Connect-VIServer $vcenterip -User $user -Password $passwd -SaveCredentials
        sleep 20 
    
        $starttime = date -Format "HH:mm:ss"
        echo "start time : $starttime"
    
        #shutdown vm
        echo (get-vm $sourcevmname).PowerState
        if( (get-vm $sourcevmname).PowerState -eq "PoweredOn" )
        {
            stop-vm $sourcevmname -Confirm:$false
            echo "stop vm"
            sleep 30
        }
    
        #clone vm
        $myDatastore = Get-Datastore -Name datastore1
        $vmhost = Get-VMHost -Name 10.32.2.99
        $pool = Get-ResourcePool -Name testpool
        echo "start clone vm..."
        $task = New-VM -Name $clonevmname -VM $sourcevmname -Datastore $myDatastore -VMHost $vmhost -ResourcePool $pool -RunAsync -ErrorAction Stop
        while( $task.state -eq "Running" )
        {
            $task = Get-Task -ID $task.id
        }
        echo "clone ok!"
    
        sleep 5
    
        #start vm
        echo "start vm"
        start-vm $clonevmname
        echo "everything ok!"
    
        $usetime = (New-TimeSpan $starttime ).TotalMinutes
        $msg = "clone take {0:n0} minutes" -f  $usetime 
        echo $msg
    }
    Catch{
        Write-Host "error !"
        Exit 1
    }
    Finally{
        $ErrorActionPreference = $eap  
    }
    

      

  • 相关阅读:
    Qualcomm download 所需要的 contents.xml
    “临界知识”的3个底层思维与方法,98%的人都不知道!
    什么是临界知识
    做一个会学习的人
    有效的结构化思维训练,MECE分析法
    那些一眼看透本质的人,逻辑都是这样形成的!
    js设计模式--策略模式
    数学——抽象与具体相结合
    使用POI解析Excel
    合成复用原则——面向对象设计原则
  • 原文地址:https://www.cnblogs.com/zqj-blog/p/10443653.html
Copyright © 2011-2022 走看看