VMWare vSphere 7.0.3环境通过PowerCLI批量修改虚拟机网卡的连接状态及开机连接设置

文章介绍了如何使用PowerCLI在VMwarevSphere环境中,通过编写脚本batcon-vms.ps1,批量设置虚拟机的网卡连接状态和开机连接设置,以解决网络IP冲突问题。

为避免网络IP冲突,虚拟机模板的网卡设置是连接中断、开机连接中断的,在通过PowerCLI批量发布虚拟机后,本文尝试PowerCLI通过PowerCLI批量修改虚拟机网卡的连接状态及开机连接设置。

一、PowerCLI环境搭建

详见前文

VMWare vSphere 7.0.3环境通过PowerCLI批量发布openeuler22.03LTS系统虚拟机

二、 用文本编辑器编写batcon-vms.csv文件

如下示例文件:

Name
GZGL_192.168.122.6_euler
GZGL_192.168.122.7_euler
GZGL_192.168.122.8_euler
GZGL_192.168.122.9_euler
GZGL_192.168.122.10_euler
GZGL_192.168.122.17_euler
GZGL_192.168.122.18_euler
GZGL_192.168.122.19_euler
GZGL_192.168.122.20_euler
GZGL_192.168.122.26_euler
GZGL_192.168.122.27_euler
GZGL_192.168.122.28_euler

三、编写 batcon-vms.ps1文件

#filename:batcon-vms.ps1
##__author__='daigjianbing'

$vcenterip = "your vCenter Ip"
$vcenteruser = "administrator@vsphere.local"
#获取密码,避免明文保存
$vcenterpw  = Read-Host "Please enter your password of the vcenter: $vcenterip  username:  $vcenteruser"

#连接服务器
Write-Host "Connect-VIServer -Protocol https -User $vcenteruser -Password $vcenterpw -Server $vcenterip"
#测试下句前面加#,实作时去掉
Connect-VIServer -Protocol https -User $vcenteruser -Password $vcenterpw -Server $vcenterip

#虚拟机清单文件为脚本同目录下的“batcon-vms.csv”文件
$vms_listfile = ".\batcon-vms.csv"
$vms = import-csv $vms_listfile
foreach ($vm in $vms)
    {
    #读取配置文件中的相关配置
    $vmname = $vm.Name
    
    # 设置网络适配器的期望连接状态,$true表示连接,$false表示断开
    $desiredState = $true
    
    # 设置网络适配器的期望开机连接状态,$true表示开机连接,$false表示开机不连接
    $desiredStartState = $true
    
    # 获取当前虚拟机对象
    $vm = Get-VM -Name $vmname
    
    # 获取当前虚拟机的所有网络适配器
    #Get-NetworkAdapter -VM $vm 
    
    # 获取当前虚拟机的'Network adapter 1'网络适配器对象
    $networkAdapter = Get-NetworkAdapter -VM $vm | Where-Object { $_.Name -eq 'Network adapter 1' }
    Write-Host "The Network adapter 1:$networkAdapter"
    
    # 设置网络适配器的连接状态和开机连接状态
    Set-NetworkAdapter -NetworkAdapter $networkAdapter -Connected:$true -StartConnected:$true -Confirm:$false

    
    # 获取当前虚拟机的所有网络适配器
    Get-NetworkAdapter -VM $vm 
    
    }
#断开vCenter连接
Disconnect-VIServer -Server $vcenterip -Confirm:$false

 四、实际测试

在powershell中执行.\batcon-vms.ps1

PS D:\vmware\批量创建虚拟机脚本> .\batcon-vms.ps1
Please enter your password of the vcenter: 192.168.188.82  username:  administrat
or@vsphere.local: mypasswd
Connect-VIServer -Protocol https -User administrator@vsphere.local -Password mypasswd -Server 192.168.188.82

Name                           Port  User
----                           ----  ----
192.168.188.82                 443   VSPHERE.LOCAL\Administrator

MacAddress       : 00:50:56:ab:6d:13
WakeOnLanEnabled : True
NetworkName      : VLAN_2183
Type             : Vmxnet3
ParentId         : VirtualMachine-vm-27255
Parent           : GZGL_192.168.122.6_euler
Uid              : /VIServer=vsphere.local\administrator@192.168.188.82:443/Vir
                   tualMachine=VirtualMachine-vm-27255/NetworkAdapter=4000/
ConnectionState  : NotConnected, GuestControl, NoStartConnected
ExtensionData    : VMware.Vim.VirtualVmxnet3
Id               : VirtualMachine-vm-27255/4000
Name             : Network adapter 1

The Network adapter 1:Network adapter 1

MacAddress       : 00:50:56:ab:6d:13
WakeOnLanEnabled : True
NetworkName      : VLAN_2183
Type             : Vmxnet3
ParentId         : VirtualMachine-vm-27255
Parent           : GZGL_192.168.122.6_euler
Uid              : /VIServer=vsphere.local\administrator@192.168.188.82:443/Vir
                   tualMachine=VirtualMachine-vm-27255/NetworkAdapter=4000/
ConnectionState  : Connected, GuestControl, StartConnected
ExtensionData    : VMware.Vim.VirtualVmxnet3
Id               : VirtualMachine-vm-27255/4000
Name             : Network adapter 1


MacAddress       : 00:50:56:ab:6d:13
WakeOnLanEnabled : True
NetworkName      : VLAN_2183
Type             : Vmxnet3
ParentId         : VirtualMachine-vm-27255
Parent           : GZGL_192.168.122.6_euler
Uid              : /VIServer=vsphere.local\administrator@192.168.188.82:443/Vir
                   tualMachine=VirtualMachine-vm-27255/NetworkAdapter=4000/
ConnectionState  : Connected, GuestControl, StartConnected
ExtensionData    : VMware.Vim.VirtualVmxnet3
Id               : VirtualMachine-vm-27255/4000
Name             : Network adapter 1
....

可以看到相应虚拟机的网卡连接状态已由“NotConnected, GuestControl, NoStartConnected”设置为“Connected, GuestControl, StartConnected”,即当前连接,开机连接。

登录vCenter进行验证:

 确实OK了。

附:以“Set-NetworkAdapter”指令为例,PowerCLI通过Get-Help获取指令帮助及获取指令样例的方法

PS D:\vmware\批量创建虚拟机脚本> Get-Help Set-NetworkAdapter

名称
    Set-NetworkAdapter

摘要
    This cmdlet modifies the configuration of the virtual network adapter.


语法
    Set-NetworkAdapter [-NetworkAdapter] <NetworkAdapter[]> [-Connected <Boolea
    n>] [-MacAddress <String>] [-NetworkName <String>] [-RunAsync] [-Server <VI
    Server[]>] [-StartConnected <Boolean>] [-Type <VirtualNetworkAdapterType>]
    [-WakeOnLan <Boolean>] [-Confirm] [-WhatIf] [<CommonParameters>]

    Set-NetworkAdapter [-NetworkAdapter] <NetworkAdapter[]> [-Connected <Boolea
    n>] -DistributedSwitch <DistributedSwitch> [-MacAddress <String>] -PortId <
    String> [-RunAsync] [-Server <VIServer[]>] [-StartConnected <Boolean>] [-Ty
    pe <VirtualNetworkAdapterType>] [-WakeOnLan <Boolean>] [-Confirm] [-WhatIf]
     [<CommonParameters>]

    Set-NetworkAdapter [-NetworkAdapter] <NetworkAdapter[]> -Portgroup <Virtual
    PortGroupBase> [-RunAsync] [-Server <VIServer[]>] [-Confirm] [-WhatIf] [<Co
    mmonParameters>]


说明
    This cmdlet modifies the configuration of the virtual network adapter. You
    can change the MAC address and the network name, and to configure the Conne
    cted, StartConnected, and WakeOnLan properties of the adapter.


相关链接
    Online Version: http://developer.vmware.com/docs/powercli/latest/vmware.vim
    automation.core/commands/set-networkadapter
    Get-NetworkAdapter
    New-NetworkAdapter
    Remove-NetworkAdapter

备注
    若要查看示例,请键入: "get-help Set-NetworkAdapter -examples".
    有关详细信息,请键入: "get-help Set-NetworkAdapter -detailed".
    若要获取技术信息,请键入: "get-help Set-NetworkAdapter -full".
    有关在线帮助,请键入: "get-help Set-NetworkAdapter -online"


PS D:\vmware\批量创建虚拟机脚本> get-help Set-NetworkAdapter -examples


名称
    Set-NetworkAdapter

摘要
    This cmdlet modifies the configuration of the virtual network adapter.


    -------------------------- Example 1 --------------------------

    Get-VM VM | Get-NetworkAdapter | Set-NetworkAdapter -MacAddress '00:50:56:a
    1:00:00' -WakeOnLan:$true

    Configures the  Mac address and the WakeOnLan setting of a virtual network
    adapter.
    -------------------------- Example 2 --------------------------

    Get-VM VM | Get-NetworkAdapter | Set-NetworkAdapter -Type EnhancedVmxnet

    Sets the type of the virtual network adapter.
    -------------------------- Example 3 --------------------------

    Get-VM VM | Get-NetworkAdapter | Set-NetworkAdapter -Connected:$true

    Sets the connection state of the virtual network adapter.
    -------------------------- Example 4 --------------------------

    $myNetworkAdapters = Get-VM | Get-NetworkAdapter -Name "Network adapter 1"
    $myVDPortGroup = Get-VDPortgroup -Name MyVDPortGroup
    Set-NetworkAdapter -NetworkAdapter $myNetworkAdapters -Portgroup $myVDPortG
    roup

    Retrieves all network adapters named "Network adapter 1" from all virtual m
    achines and connects them to the specified distributed port group.
    -------------------------- Example 5 --------------------------

    $myNetworkAdapter = Get-VM -Name MyVM | Get-NetworkAdapter -Name "Network a
    dapter 1"
    $myVDSwitch = Get-VDSwitch -Name MyVDSwitch
    Set-NetworkAdapter -NetworkAdapter $myNetworkAdapter -DistributedSwitch $My
    VDSwitch -PortId 100

    Retrieves the network adapter named "Network adapter 1" added to the specif
    ied virtual machine and connects it to the specified port on the specified
    distributed switch.

<think>好的,我现在需要帮助用户了解如何使用VMware PowerCLI批量创建虚拟机。用户提到了之前的引用,其中包含批量创建用户、修改网卡设置以及社区资源的信息。但用户当前的问题集中在批量创建虚拟机上,所以我需要专注于这一点。 首先,我需要回忆一下PowerCLI的基本操作,比如连接vCenter/ESXi服务器,这是所有操作的前提。用户之前的问题中已经提到过Connect-VIServer命令,这里可能需要再次强调或确认是否需要详细说明。 接下来,用户需要批量创建虚拟机的方法。根据引用中的内容,引用[2]提到PowerCLI是自动化管理vSphere环境的工具,而引用[1]和[3]分别涉及批量创建用户和修改网卡设置,可能相关的操作步骤类似,比如使用循环和CSV文件。因此,我需要考虑如何将类似的方法应用到虚拟机创建上。 用户可能需要示例脚本,所以准备一个使用CSV文件批量创建虚拟机的示例是必要的。同时,需要确保脚本中的命令正确,比如使用New-VM命令,并指定模板、位置、资源池等参数。引用[3]中提到修改网卡设置,可能在创建虚拟机后需要额外的配置步骤,但用户当前的问题可能只需要创建部分,不过可以考虑提及后续配置的可能性,作为扩展。 另外,引用[4]提到社区资源,可能需要推荐用户参考社区仓库获取更多脚本或模块,比如预定义的函数或更复杂的部署流程。 还需要考虑最佳实践,比如错误处理、日志记录、性能优化,比如使用-RunAsync参数进行异步操作以加快批量处理速度,这在之前的回答中也提到过。同时,安全性方面,如使用凭证对象而不是硬编码密码,这也是需要注意的点。 用户可能还会遇到常见问题,比如如何处理不同模板、不同存储或网络配置,所以在示例中可能需要包含这些变量的处理方式。此外,是否需要考虑虚拟机的命名规则、避免重复等,这些也是实际使用中需要注意的地方。 最后,生成相关问题,帮助用户深入了解更多相关内容,比如如何克隆虚拟机、如何配置虚拟机选项,或者如何集成到其他自动化工具中,如Ansible,如引用[4]提到的社区资源可能涉及这些内容。 需要确保回答结构清晰,分步骤说明,并提供可运行的脚本示例,同时引用之前的引用资料来支持内容,比如引用[2]和[4]来强调PowerCLI的自动化能力和社区支持。此外,注意用户之前提到的CSV文件的使用,这可能是一个关键点,需要在示例中详细展示。</think>### 使用 VMware PowerCLI 批量创建虚拟机的详细方法与示例脚本 以下是结合引用[1][2][3][4]中提到的批量操作逻辑和最佳实践,整理出的 **PowerCLI 批量创建虚拟机**的核心流程与脚本示例: --- #### 一、**准备工作** 1. **CSV 配置文件** 创建一个 CSV 文件(如 `vm_list.csv`),定义虚拟机参数。字段需与 PowerCLI 命令参数匹配,示例如下: ```csv Name,Template,ResourcePool,Datastore,Network,Folder,NumCPU,MemoryGB Web-01,Ubuntu-22.04-Template,Cluster01/Resources,DS-01,VM Network,/Dev,2,4 DB-01,Windows2022-Template,Cluster01/Resources,DS-02,Prod-Network,/Prod,4,8 ``` > **引用支持**:类似引用[3]中通过 CSV 驱动网卡配置的批量操作逻辑[^3]。 --- #### 二、**脚本实现步骤** 1. **连接 vCenter** ```powershell # 安全加载凭据(避免明文密码) $credential = Get-Credential -Message "输入 vCenter 管理员账号" Connect-VIServer -Server "vcenter.example.com" -Credential $credential ``` 2. **读取 CSV 并批量创建虚拟机** ```powershell # 导入 CSV 数据 $vmConfigs = Import-Csv -Path "C:\Scripts\vm_list.csv" foreach ($config in $vmConfigs) { try { # 创建虚拟机 $newVM = New-VM -Name $config.Name ` -Template $config.Template ` -ResourcePool $config.ResourcePool ` -Datastore $config.Datastore ` -Location $config.Folder ` -ErrorAction Stop # 配置硬件(CPU/内存) $newVM | Set-VM -NumCpu $config.NumCPU -MemoryGB $config.MemoryGB -Confirm:$false # 配置网络适配器(假设单网卡) $networkAdapter = $newVM | Get-NetworkAdapter $networkAdapter | Set-NetworkAdapter -NetworkName $config.Network -Confirm:$false Write-Host "虚拟机 $($config.Name) 创建成功!" -ForegroundColor Green } catch { Write-Host "错误: $($_.Exception.Message)" -ForegroundColor Red } } # 断开连接 Disconnect-VIServer -Server * -Confirm:$false ``` --- #### 三、**关键参数与优化技巧** 1. **模板与自定义规范** - 使用 `OSCustomizationSpec` 参数自动配置主机名、IP 等(需提前创建规范): ```powershell New-VM ... -OSCustomizationSpec "Linux-Config" ``` 2. **异步执行加速批量操作** ```powershell # 使用 -RunAsync 并行创建(适用于大规模部署) $vmConfigs | ForEach-Object { New-VM ... -RunAsync } ``` 3. **存储与网络高级配置** - **多网卡支持**:通过 `New-NetworkAdapter` 添加额外适配器[^3]。 - **磁盘扩展**:创建后使用 `New-HardDisk` 调整磁盘容量。 --- #### 四、**错误处理与日志记录** 1. **增强脚本健壮性** ```powershell # 记录日志到文件 Start-Transcript -Path "C:\Scripts\vm_deploy.log" # 检查资源是否存在 if (-not (Get-Template -Name $config.Template -ErrorAction SilentlyContinue)) { throw "模板 $($config.Template) 不存在" } ``` --- #### 五、**扩展应用(引用社区资源)** 1. **调用 PowerCLI 社区模块** - 引用[4]提到的社区仓库提供预封装函数(如 `Invoke-BulkVMDeployment`),可简化复杂场景: ```powershell Install-Module -Name VMware.Community.BulkDeploy -Repository PSGallery Invoke-BulkVMDeployment -ConfigFile "vm_list.csv" -Cluster "Cluster01" ``` --- ### 示例脚本完整代码 ```powershell # 连接 vCenter $cred = Get-Credential Connect-VIServer -Server "vcenter.example.com" -Credential $cred # 批量创建虚拟机 $vmList = Import-Csv -Path "C:\Scripts\vm_list.csv" foreach ($vm in $vmList) { try { $params = @{ Name = $vm.Name Template = $vm.Template ResourcePool = $vm.ResourcePool Datastore = $vm.Datastore Location = $vm.Folder ErrorAction = &#39;Stop&#39; } $newVM = New-VM @params $newVM | Set-VM -NumCpu $vm.NumCPU -MemoryGB $vm.MemoryGB -Confirm:$false Get-NetworkAdapter -VM $newVM | Set-NetworkAdapter -NetworkName $vm.Network -Confirm:$false } catch { Write-Warning "创建 $($vm.Name) 失败: $_" } } Disconnect-VIServer -Confirm:$false ``` --- ### 相关问题 1. **如何通过 PowerCLI 克隆现有虚拟机修改配置?** 2. **批量创建时如何自动分配 IP 地址?** 3. **PowerCLI 如何与 vRealize Orchestrator 集成实现审批流程?** 4. **如何通过 PowerCLI 检查虚拟机创建后的网络连通性?** > **引用提示**:更多高级操作可参考社区仓库中的自动化模板[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值