You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell在AzureRM中创建与同RG内VM同配置的新NIC

刚好我之前处理过类似的AzureRM场景,给你一步步拆解这两个需求:

1. 创建与现有VM同VNet/Subnet的网络接口(NIC)

要实现这个,核心是先提取现有VM的子网资源ID,再用这个ID创建新NIC:

  • 步骤1:获取现有VM的网络配置信息
    先定位到目标VM的网络接口,从中提取子网ID(这个ID已经包含了对应的虚拟网络信息,不用单独查询VNet):

    # 替换成你的资源组名和现有VM名称
    $resourceGroupName = "Your-RG-Name"
    $existingVMName = "Existing-VM-Name"
    
    # 获取现有VM关联的网络接口
    $existingNic = Get-AzureRmVM -ResourceGroupName $resourceGroupName -Name $existingVMName `
                  | Select-Object -ExpandProperty NetworkInterfaces `
                  | Get-AzureRmNetworkInterface
    
    # 提取子网的资源ID
    $subnetId = $existingNic.IpConfigurations[0].Subnet.Id
    
  • 步骤2:创建新的网络接口
    用拿到的子网ID,直接创建和现有VM同网络环境的NIC:

    # 定义新NIC的名称
    $newNicName = "New-VM-NIC"
    
    # 创建IP配置(绑定目标子网)
    $newNicConfig = New-AzureRmNetworkInterfaceIpConfig -Name "ipconfig1" -SubnetId $subnetId
    
    # 生成新NIC
    New-AzureRmNetworkInterface -Name $newNicName `
                                -ResourceGroupName $resourceGroupName `
                                -Location $existingNic.Location `
                                -IpConfiguration $newNicConfig
    

    如果需要给新NIC指定静态私有IP,只需要在New-AzureRmNetworkInterfaceIpConfig里加上 -PrivateIpAddress "10.0.0.10" 参数即可。

2. 克隆VM(非托管磁盘转非托管磁盘)时,基于现有VM的NIC配置创建新NIC

这个场景需要同时处理磁盘复制和网络配置复用,完整流程如下:

  • 步骤1:收集现有VM的关键信息
    要拿到子网ID、磁盘URI、VM大小等核心参数:

    # 替换成你的资源组、VM名称、存储账户名
    $resourceGroupName = "Your-RG-Name"
    $existingVMName = "Existing-VM-Name"
    $newVMName = "Cloned-VM-Name"
    $storageAccountName = "Your-Storage-Account-Name"
    
    # 获取现有VM对象
    $existingVM = Get-AzureRmVM -ResourceGroupName $resourceGroupName -Name $existingVMName
    
    # 提取现有NIC的子网ID
    $existingNic = Get-AzureRmNetworkInterface -ResourceId $existingVM.NetworkInterfaces[0].Id
    $subnetId = $existingNic.IpConfigurations[0].Subnet.Id
    
    # 获取现有非托管OS磁盘的URI,并生成新磁盘的URI(替换名称避免冲突)
    $osDiskUri = $existingVM.StorageProfile.OsDisk.Vhd.Uri
    $newOsDiskUri = $osDiskUri.Replace($existingVMName, $newVMName)
    
  • 步骤2:复制非托管OS磁盘
    非托管磁盘存储在存储账户的Blob容器里,需要先复制磁盘文件:

    # 获取存储账户上下文
    $storageKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName).Value[0]
    $storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey
    
    # 复制磁盘Blob(默认容器是vhds,根据你的实际情况调整)
    Start-AzureStorageBlobCopy -Context $storageContext `
                               -SrcBlob (Split-Path $osDiskUri -Leaf) `
                               -SrcContainer "vhds" `
                               -DestBlob (Split-Path $newOsDiskUri -Leaf) `
                               -DestContainer "vhds"
    
    # 可选:等待复制完成(避免后续步骤报错)
    do {
        $copyState = Get-AzureStorageBlobCopyState -Context $storageContext -Blob (Split-Path $newOsDiskUri -Leaf) -Container "vhds"
        Start-Sleep -Seconds 10
    } while ($copyState.Status -eq "Pending")
    
  • 步骤3:创建新NIC(复用现有VM的网络配置)
    用之前拿到的子网ID创建新NIC,名称和新VM关联更易识别:

    $newNicName = "$newVMName-NIC"
    
    # 创建IP配置
    $newIpConfig = New-AzureRmNetworkInterfaceIpConfig -Name "ipconfig1" -SubnetId $subnetId
    
    # 创建新NIC
    $newNic = New-AzureRmNetworkInterface -Name $newNicName `
                                          -ResourceGroupName $resourceGroupName `
                                          -Location $existingVM.Location `
                                          -IpConfiguration $newIpConfig
    
  • 步骤4:创建克隆的VM
    把复制好的磁盘和新NIC组合起来,生成新VM:

    # 创建VM基础配置(和原VM同大小)
    $newVMConfig = New-AzureRmVMConfig -VMName $newVMName -VMSize $existingVM.HardwareProfile.VmSize
    
    # 绑定非托管OS磁盘(如果是Linux系统,把-Windows换成-Linux)
    Set-AzureRmVMOSDisk -VM $newVMConfig `
                        -Name "$newVMName-OSDisk" `
                        -VhdUri $newOsDiskUri `
                        -CreateOption Attach `
                        -Windows
    
    # 添加新NIC到VM配置
    Add-AzureRmVMNetworkInterface -VM $newVMConfig -Id $newNic.Id
    
    # 生成新VM
    New-AzureRmVM -ResourceGroupName $resourceGroupName -Location $existingVM.Location -VM $newVMConfig
    

内容的提问来源于stack exchange,提问作者harish kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:18:26