如何使用New-AzVm创建不带NSG的Azure虚拟机?参数设置遇阻
解决New-AzVm无法跳过NSG创建的问题
当使用New-AzVm的简化参数集(指定VirtualNetworkName和SubnetName)时,即使将SecurityGroupName设为$null,cmdlet仍会自动创建默认NSG并关联到NIC——这是该参数的设计逻辑:未指定有效NSG名称时,就触发自动创建行为,而非跳过NSG关联。
要创建不带NSG的虚拟机,需要手动创建无NSG关联的NIC,再让VM使用这个现成的NIC,具体步骤如下:
- 保留原有的变量定义(如凭据、资源组等)
- 获取目标虚拟网络和子网的对象,用于NIC创建
- 创建不关联任何NSG的NIC
- 调用
New-AzVm时,通过-NetworkInterface参数指定这个预创建的NIC,同时移除VirtualNetworkName、SubnetName、SecurityGroupName这些自动创建NIC的参数
修改后的完整代码示例:
$Date = Get-Date -Format "MMddyymm" $user = "Sitecore" $password = ConvertTo-SecureString "Qwerty123456" -AsPlainText -Force $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $password $RGroup = 'test' $Location = "Westus3" $VMName = "vmtest$date" $image = "vmtest-image-20220805165444" $vnet = "vnet1" $SizeVM = "Standard_b4ms" $NICName = "$VMName$date" $Subnet = "default" $tags = @{'xxx' = 'yyy'} # 获取虚拟网络和子网对象 $vnetObj = Get-AzVirtualNetwork -ResourceGroupName $RGroup -Name $vnet $subnetObj = $vnetObj.Subnets | Where-Object Name -eq $Subnet # 创建无NSG关联的NIC $nic = New-AzNetworkInterface -Name $NICName ` -ResourceGroupName $RGroup ` -Location $Location ` -SubnetId $subnetObj.Id ` -Tag $tags # 创建VM并使用预创建的NIC New-AzVM -ResourceGroupName $RGroup ` -Name $VMName ` -Image $image ` -Location $Location ` -NetworkInterface $nic ` -PublicIpAddressName $null ` -Credential $credential ` -Size $SizeVM
关键说明:
- 手动创建NIC时,不指定
-NetworkSecurityGroupName参数,即可让NIC处于无NSG关联状态 - 使用
-NetworkInterface参数后,New-AzVm会跳过自动创建NIC的流程,直接使用你提供的NIC,自然也不会生成默认NSG
内容的提问来源于stack exchange,提问作者Yar
相关产品推荐
相关产品推荐

