首页 > 系统相关 >PowerShell在VC上批量创建虚拟机-for-Linux

PowerShell在VC上批量创建虚拟机-for-Linux

时间:2023-05-27 19:45:21浏览次数:41  
标签:VC 虚拟机 VM echo Linux vm CSV Vmname

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:[email protected]

本文使用Powershell调用VMware-PowerCLI实现批量创建虚拟机的功能。

环境说明

软件名 版本 说明
Windows Windows 10专业版 21H2 操作系统
Ubuntu Ubuntu 22.04.1 LTS 操作系统
PowerShell(Windows) PowerShell 5.1.19041 Powershell
PowerShell(Ubuntu) PowerShell 7.2.6 Powershell
VMware-PowerCLI VMware-PowerCLI-12.6.0 Powershell-sdk

使用说明

目前只适用于Centos7及以上的操作系统,同时操作系统必须关闭NetworkManager,同时网络配置基础配置在。

图 1

参数说明

使用到的类名

  • New-vm:新建虚拟机
  • Set-vm:设置虚拟机
  • Get-vm:获取虚拟机信息
  • Get-NetworkAdapter:获取虚拟机网络适配器信息
  • set-NetworkAdapter:设置虚拟机网络适配器信息
  • New-HardDisk:新建虚拟机磁盘
  • Start-VM:启动虚拟机

模块参数说明

New-vm模块字段:

  • -Name:新虚拟机名
  • -Template:模板虚拟机名
  • -VMHost:宿主机管理地址
  • -Datastore:lun名
  • -StorageFormat:磁盘格式一般使用Thin模式
  • -Location:虚拟机文件夹

Set-vm模块字段:

  • -VM:虚拟机名
  • -Confirm:是否进行二次确认配置
  • -MemoryGB:设置内存值
  • -NumCpu:设置CPU

New-HardDisk模块字段:

  • -VM:虚拟机名称
  • -CapacityGB:置备的存储容量
  • -Persistence:
  • -DiskType:磁盘类型
  • -StorageFormat:存储格式
  • -Confirm:是否进行二次确认配置

Start-VM模块字段:

  • -VM:虚拟机名称

脚本及配置文件

脚本文件

Add-PSSnapin VMware.VimAutomation.Core
#Script explain:virtual machine Temp must installed vm-tools

#Table format of virtual machine to be created(CSV字段参考内容,不在程序中实际运行,不要取消掉从该行开始的3行前的#号)
#Vmname             Template                  PhysicalHost        Datastore                  Vmcpu        Vmmem       Vmdir               Ipaddr              Hostname               NetworkMask        OsType        Disk_01      Disk_02   NetworkVLAN     NetGATEWAY
#Test_power_shell_20221008_lvan    Centos_7.9_lvm_TM    192.168.100.151    TEST-EMC-DS01    16    32    XY_Admin_Main_Used    192.168.100.222    Test_power_shell_20221008_lvan    255.255.0.0    Centos7    0    20    TRUST_VLAN2102    192.168.100.1


#define variable(定义全局变量:vcenter地址、vcenter用户名、vcenter密码、待操作虚拟机配置文件路径)
$vcenter_url='172.16.16.223'
$vcenter_user='[email protected]'
$vcenter_password='VMware_Test@2022'
$file_name='E:\Create_Vm\yh_test_create_vm\test2_lvan_v5.csv'

#Connect Vcenter(连接Vceneter 如果连接失败,退出程序并反馈退出码为 1)
Connect-VIServer $vcenter_url -user $vcenter_user  -password $vcenter_password
if ( $? ){
    echo "Connect Vcenter Success."
}else{
    echo "Connect Vcenter faile,Please check whether the Vcenter ip or user password is correct.exit code 1"
    exit 2
}


#define create virtual machine function(虚拟机基于模板创建函数)
function create_vm_from_temp(){
    #Import CSV Info(导入CSV文件,如果导入文件失败,退出程序并反馈退出码为 2)
    Try{
        $vms = Import-CSV $file_name
    }
    Catch{
        echo "Error: Read file error,Please Check whether the xx file exists.Program exit code 2"
        exit 1
    }
    foreach ($vm in $vms){
        ##从这里开始就是创建虚拟机的部分
        ##判断当前虚拟机是否存在如果虚拟机存在程序退出,反馈退出码 3
        if ( Get-VM $vm.Vmname )
        {
          Write-Host --ForegroundColor Blue "主机名已经存在: $vm.Vmname"
          echo "Virtual machine name Already exists,Please edit Virtual Machine $vm.Vmname."
          exit 3
        }
        
        #该模板需要安装tools,同时对应的操作系统选择正确。
        #通过模板创建一个虚拟机
        New-vm -vmhost $vm.PhysicalHost -Name $vm.Vmname -Template $vm.Template -Datastore $vm.Datastore -Location $vm.Vmdir  -StorageFormat "Thin" 
        
        #设置虚拟机内存、网卡VLAN
        $vmnname = Get-VM $vm.Vmname
        Set-VM  -VM $vmnname -Confirm:$false  -MemoryGB $vm.Vmmem -NumCpu $vm.Vmcpu
        Get-NetworkAdapter $vmnname | set-NetworkAdapter -NetworkName $vm.NetworkVLAN  -StartConnected:$true -Confirm:$false
        
        ##设置磁盘
        ##从这里开始就是结束创建虚拟机的部分
        ##添加第一块磁盘
        if ( $vm.Disk_01 -eq ""  -or $vm.Disk_01 -eq 0){
            echo "not add disk"
        }else{
            New-HardDisk -VM $vmnname  -CapacityGB  $vm.Disk_01 -Persistence persistent -DiskType Flat -StorageFormat Thin -Confirm:$false
        }
        ##添加第二块磁盘
        if ( $vm.Disk_02 -eq ""  -or $vm.Disk_02 -eq 0){
            echo "not add disk"
        }else{
            New-HardDisk -VM $vmnname -CapacityGB  $vm.Disk_02 -Persistence persistent -DiskType Flat -StorageFormat Thin -Confirm:$false
        }


    }
}


#define start virtual machine power function(虚拟机开机函数)
function start_vm(){
    #Import CSV Info(导入CSV文件,如果导入文件失败,退出程序并反馈退出码为 6)
    Try{
        $vms = Import-CSV $file_name
    }
    Catch{
        echo "Error: Read file error,Please Check whether the xx file exists.Program exit code 6"
        exit 1
    }
     foreach ($vm in $vms){
        Get-VM $vm.Vmname | Start-VM
        #针对只有一台或两台机器的时候,要把秒数调整为15
        Start-Sleep -s 3
    }
}


#执行命令
#exec virtual machine command(执行操作系统配置IP地址命令)
function exec_virtual_command(){
    #Import CSV Info(导入CSV文件,如果导入文件失败,退出程序并反馈退出码为 4)
    Try{
        $vms = Import-CSV $file_name
    }
    Catch{
        echo "Error: Read file error,Please Check whether the xx file exists.Program exit code 4"
        exit 1
    }

    foreach ($vm in $vms){
        ##这一步开始就是设置操作系统IP地址和mask的部分
        ##判断当前虚拟机是否存在如果虚拟机不存在,反馈退出码 5
        if ( Get-VM $vm.Vmname )
        {
          Write-Host --ForegroundColor Blue "主机名存在: $vm.Vmname"
        }else{
          echo "Virtual machine name Not exists,Please edit Virtual Machine $vm.Vmname."
          exit 5
        }

        #设置命令通过重定向方式修改,这种方式有bug
        #$command_text="echo  IPADDR="+$vm.Ipaddr+" >> /etc/sysconfig/network-scripts/ifcfg-ens192; echo NETMASK="+$vm.NetworkMask+" >> /etc/sysconfig/network-scripts/ifcfg-ens192; echo GATEWAY="+$vm.NetGATEWAY+" >> /etc/sysconfig/network-scripts/ifcfg-ens192; systemctl restart network"
        #设置命令通过sed替换方式修改,保证IPADDR、NETMASK、GATEWAY字段都有
        $command_text="sed -i " + "-e 's/IPADDR.*/"+"IPADDR="+$vm.Ipaddr+"/g' "+" -e 's/NETMASK.*/"+"NETMASK="+$vm.NetworkMask+"/g' "+"  -e 's/GATEWAY.*/"+"GATEWAY="+$vm.NetGATEWAY+"/g' "+"/etc/sysconfig/network-scripts/ifcfg-ens192"+";systemctl restart network"
        
        #echo "$command_text" ,引用变量不能用引号
        echo $command_text

        ##执行命令
        Get-VM $vm.Vmname    | Invoke-VMScript -ScriptText $command_text -GuestUser 'root'  -GuestPassword  'Huawei_12345#'
        if ( $?)
        {
            echo "Command exec Success."
        }
    }
}






create_vm_from_temp
#start_vm
#exec_virtual_command

配置文件

图 2

标签:VC,虚拟机,VM,echo,Linux,vm,CSV,Vmname
From: https://www.cnblogs.com/Pigs-Will-Fly/p/17437214.html

相关文章

  • Linux 常用命令大全【yyds干货盘点4】
    1. 文本处理catfile1file2...|command<>file1_in.txt_or_file1_out.txtgeneralsyntaxfortextmanipulationusingPIPE,STDINandSTDOUTcatfile1|command(sed,grep,awk,grep,etc...)>result.txt合并一个文件的详细说明文本,并将简介写入一个新文件中ca......
  • 网安--Linux cnetos7相关操作
    1、修改静态网络配置文件vim/etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR、NETMASK等需要大写如果出现问题可以重启虚拟网卡2、centos修改yum源shift+insert粘贴1、yum源存放的地址 2、对旧的文件进行备份 3、替换yum源地址,换成阿里云的地址  3、Xs......
  • Linux为什么要有大页内存
    Linux为什么要有大页内存?为什么DPDK要求必须要设置大页内存?这都是由系统架构决定的,系统架构发展到现在,又是在原来的基础上一点点演变的。一开始为了解决一个问题,大家设计了一个很好的方案,随着事物的发展,发现无法满足需求,就在原来的基础上改进,慢慢的变成了现在的样子。不过技术革新......
  • Oracle Linux 8.8 发布 - Oracle 提供支持 RHEL 兼容发行版
    OracleLinux8.8发布-Oracle提供支持RHEL兼容发行版OracleLinuxwithUnbreakableEnterpriseKernel(UEK)&RedHatcompatiblekernel(RHCK)请访问原文链接:https://sysin.org/blog/oracle-linux-8/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgOracle......
  • Oracle Linux 9.2 发布 - Oracle 提供支持 RHEL 兼容发行版
    OracleLinux9.2发布-Oracle提供支持RHEL兼容发行版OracleLinuxwithUnbreakableEnterpriseKernel(UEK)&RedHatcompatiblekernel(RHCK)请访问原文链接:https://sysin.org/blog/oracle-linux-9/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgOracle......
  • 记录一个命令 可以在linux很方便的安装一些软件
    小鱼的一键安装系列wgethttp://fishros.com/install-Ofishros&&.fishros一键安装:ROS(支持ROS和ROS2,树莓派Jetson)贡献@小鱼一键安装:VsCode(支持amd64和arm64)贡献@小鱼一键安装:github桌面版(小鱼常用的github客户端)贡献@小鱼一键安装:nodejs开发环境(通过nod......
  • Linux篇三
    linux常用指令指令运行级别运行级别说明:0:关机1:单用户【找回丢失密码】2:多用户状态没有网络服务3:多用户状态有网络服务4:系统未使用保留给用户5:图形界面6:系统重启常用运行级别是3和5,也可以指定默认运行级别,后面演示**实例:**init0就是关机在centos7以前,letc/inittab文件......
  • 使用vscode远程连接Linux环境写C程序
    1. 下载安装vscode2. 在扩展商店搜索chinese安装中文语言包, 相当于汉化vscode, 应该需要重启生效3. 安装配置插件RemoteSSH4. 连接远程主机, 在资源管理器中可以管理文件5. 试着创建一个文件, 以.c作为扩展名, 会自动下载插件c/c++扩展包6. 写好的C程序, 可以......
  • Linux基础(六)
    推荐步骤:管理Linux操作系统,添加新的硬盘40G创建三个分区,第一个分区和第二个分区大小5G,第一个分区格式化XFS文件系统,第二个分区为EXT4文件系统,将两个文件系统分别手动挂载到/db1和/sdb2目录上,查看挂载的分区在添加磁盘创建第三个分区大小5G,将第三个分区转换为swap分区,进行格式化扩展......
  • Lupin的linux学习路(ubuntu)
    Lupin的linux的学习路(Ubuntu)安装Ubuntu双系统制做一个系统引导u盘(到Ubuntu官网下载镜像,使用rufus镜像写入软件将镜像写入到u盘中,写入成功后,引导u盘制做完成)。在Windows系统中分出200G的空余磁盘空间安装Ubuntu系统。电脑关机,插上引导u盘,进入电脑引导选项,进入Ubuntu安......