首页 > 其他分享 >使用powercli 批量多线程 克隆vsphere虚拟机

使用powercli 批量多线程 克隆vsphere虚拟机

时间:2023-05-30 15:32:51浏览次数:49  
标签:脚本 vsphere OSCustomizationSpec Get 虚拟机 VM _. 多线程

$VMS = import-csv -Path 'vm001.csv'
    
$Job = $VMS | ForEach-Object -Parallel {
    #忽略位
    $Skip = $($_.skip)
    if ($Skip -eq "yes") { continue }    
    #虚拟机名字
    $VMname = $($_.name)
    #资源池名字
    $Resource_Pool = $($_.res_pool)
    #虚拟机文件夹
    $Folder = $($_.folder)
    #datastore名字
    $Datasto = $($_.datastore)
    #模板名称
    $Template = $($_.template)  
    #IP地址
    $ip = $($_.ip)
    $subnetmask = $($_.subnetmask)
    $gateway = $($_.gateway)
    $dns1 = $($_.dns1)
    $dns2 = $($_.dns2)
    #备注信息
    $note = $($_.note)
    #CPU
    $CPU = $($_.cpus)
    $core = $($_.cores)
    #内存
    $memory = $($_.memory)
    #硬盘
    $disk = $($_.disk)
        
    #每个进程都需要重新连接一次 vcenter服务器
    Connect-VIServer "vcenter." -User [email protected] -Password Huayun@123
        
    #自定义策略名称,需要先建立一个linux 或者 windows 的虚拟机自定义规范模板,后面的模板基于此自定义规范进行复制修改
    $OSCustomizationSpec = New-OSCustomizationSpec -OSCustomizationSpec $($_.OSCustomizationSpec) -Name $VMname

    if ($OSCustomizationSpec.OSType -eq "Linux") {
        # Update Spec with our desired IP information
        #Get-OSCustomizationSpec -name $OSCustomizationSpec |Get-OSCustomizationNicMapping |Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress $VM.ip -SubnetMask $VM.subnetmask -DefaultGateway 10.0.4.254 
        $OSCustomizationSpec |
        Get-OSCustomizationNicMapping |
        Set-OSCustomizationNicMapping -IPmode UseStaticIP `
            -IpAddress $ip `
            -SubnetMask $subnetmask `
            -DefaultGateway $gateway `
        
    }
    else {
        $OSCustomizationSpec |
        Get-OSCustomizationNicMapping |
        Set-OSCustomizationNicMapping -IPmode UseStaticIP `
            -IpAddress $ip `
            -SubnetMask $subnetmask `
            -DefaultGateway $gateway `
            -Dns $dns1, $dns2 #windows must
    }
    $OSCustomizationSpec |Set-OSCustomizationSpec -NamingScheme fixed -NamingPrefix $VMname
    # Get updated Spec Object
    $Spec = Get-OSCustomizationSpec -Name $OSCustomizationSpec 
        
    New-VM -Name $VMname `
        -Template $Template `
        -Datastore $Datasto `
        -ResourcePool $Resource_Pool `
        -OSCustomizationSpec $Spec `
        -Location $Folder `
        -Notes $note 
        
    Set-VM -VM $VMname `
        -NumCpu $CPU `
        -CoresPerSocket $core `
        -MemoryGB $memory `
        -Confirm:$false
        
    Get-HardDisk -VM $VMname | Set-HardDisk -CapacityGB $disk -Confirm:$false
    #Get-VM -Name $vmname | Get-NetworkAdapter | Set-NetworkAdapter -Portgroup $vdport -Confirm:$false
    Start-VM -VM $VMname

    Remove-OSCustomizationSpec -OSCustomizationSpec $OSCustomizationSpec -Confirm:$false

} -ThrottleLimit 5 -AsJob

Receive-Job -Job $Job -Wait
Remove-Job -Job $Job

该PowerCLI脚本可以自动化部署虚拟机,批量多线程操作,包括以下步骤:

  1. 从CSV文件中读取虚拟机配置信息,包括虚拟机名称、资源池、虚拟机文件夹、数据存储、模板、IP地址、子网掩码、网关、DNS、备注、CPU、内存和硬盘等。
  2. CSV表头作为变量名称使用。
  3. 根据虚拟机配置信息创建自定义规范,根据规范配置虚拟机的IP地址、子网掩码、网关、DNS等。
  4. 使用自定义规范创建虚拟机。
  5. 配置虚拟机的CPU、内存和硬盘等。
  6. 启动虚拟机。

需要注意以下事项:

  1. 环境需要powershel 7 以上版本,执行脚本之前安装VMware PowerCLI,建议使用最新版本。
  2. 执行脚本需要管理员权限。
  3. 执行脚本前需要准备好CSV文件,格式必须符合要求。
  4. 执行脚本前需要确保vCenter服务器已经连接。
  5. 执行脚本时需要指定自定义规范的名称,该规范必须已经存在且符合要求。
  6. 执行脚本时需要指定模板的名称,该模板必须已经存在且符合要求。
  7. 执行脚本时需要指定数据存储的名称,该数据存储必须已经存在且符合要求。
  8. 执行脚本时需要指定资源池的名称,该资源池必须已经存在且符合要求。
  9. 执行脚本时需要指定虚拟机文件夹的名称,该文件夹必须已经存在且符合要求。
  10. 执行脚本时需要指定虚拟机的名称、CPU、内存和硬盘等信息,这些信息必须符合要求。
  11. 执行脚本时需要指定IP地址、子网掩码、网关、DNS等信息,这些信息必须符合要求。
  12. 执行脚本时需要指定ThrottleLimit参数,该参数控制并发执行的任务数量,具体取值根据实际情况确定。

麻烦大神给一下修改建议!

标签:脚本,vsphere,OSCustomizationSpec,Get,虚拟机,VM,_.,多线程
From: https://blog.51cto.com/sonic2825/6379251

相关文章

  • gdb调试c++多线程死锁问题初步
    https://blog.csdn.net/zsiming/article/details/126695393 总结:psaux|grepfilename //找出进程IDtop-HpPID //列出进程号为PID下的所有线程gdbatattchPID //用gdb调试正在运行的进程(进程号为PID)(需要sudo权限)threadapplyallbt //这里涉及2个命令:thr......
  • vCenter运维:vCenter集群中已孤立虚拟机解决办法
    vCenter集群中已孤立虚拟机解决办法问题描述  在一次意外断电后,vCenter中的部分机器出现 已孤立 状态。解决办法1.选中已孤立虚拟机名字,右键选择“从清单中删除”,如图。2.打开数据存储,找到对应虚拟机名字的文件夹,进入目录后,找到.vmx后缀的文件,选中,然后点击注册虚拟机重新......
  • C# 多线程
    什么是线程Thread线程是一个可执行路径,它可以独立于其它线程执行。每个线程都在操作系统的进程(Process)内执行,而操作系统进程提供了程序运行的独立环境。单线程应用,在进程的独立环境里只跑一个线程,所以该线程拥有独占权多线程应用,单个进程中会跑多个线程,它们会共享当前的执行......
  • 深入虚拟机笔记之整数运算
    第12章整数运算     二进制补码运算:java虚拟机支持的所有整数类型:byte、short、int、long,它们都是带符号的二进制补码数。在一个二进制补码数中,最重要的位是它的符号位(最高位),0表示正整数和0,1表示负整数。   能够被二进制补码表示的数值范围为:2的总位数的次幂。其中一半是......
  • 深入虚拟机笔记之类型的生命周期
    第7章类型的生命周期        java虚拟机通过装载、连接和初始化一个java类型,使该类型可以被正在运行的java程序所使用。   装载:是把二进制形式的java类型读入java虚拟机中。   连接:是把读入的二进制形式的类型数据合并到虚拟机的运行时状态中去。连接分三个子步......
  • 深入虚拟机笔记之整数运算
    第12章整数运算     二进制补码运算:java虚拟机支持的所有整数类型:byte、short、int、long,它们都是带符号的二进制补码数。在一个二进制补码数中,最重要的位是它的符号位(最高位),0表示正整数和0,1表示负整数。   能够被二进制补码表示的数值范围为:2的总位数的次幂。其中一半是......
  • java虚拟机总结
     类型的生命周期:java虚拟机通过装载、连接和初始化一个java类型,使该类型可以被正在运行的java程序所使用。装载:是把二进制形式的java类型读入java虚拟机中。连接:是把读入的二进制形式的类型数据合并到虚拟机的运行时状态中去。连接分三个子步骤(验证、准      备和解析......
  • ABAP 多线程
    Codelistingfor:ZTEST9010Description:12345*&---------------------------------------------------------------------**&ReportZTEST_ASYNC_RFC*&---------------------------------------------------------------------**&*&-----------......
  • java多线程
    java多线程进程、线程与多线程进程是执行程序的一次执行过程,是一个动态的概念,是系统支援分配的单位通常一个进程可以包含一个或多个线程。线程是CPU调度和执行的单位线程就是独立执行的路径,由cpu调度线程会带来额外的开销,如cpu调度时间,并发控制开销每个线程在自己......
  • 深入理解 Java 虚拟机 —— Java 内存模型与线程
    处理器的效率和一致性(与java内存访问可类比)计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处......