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

如何使用PowerShell从Azure虚拟机对象获取Azure网络安全组对象

如何从Azure虚拟机对象获取关联的网络安全组(NSG)对象

问题原因

你遇到的NetworkSecurityGroup属性为null,主要有两个可能:

  • 默认Get-AzNetworkInterface命令不会自动加载关联的NSG详细信息,需要显式指定展开属性
  • 你的NSG可能是关联在子网而非虚拟机的网卡(NIC)上

解决方法

方法1:获取网卡时展开NSG属性

如果NSG直接绑定在NIC上,只需在获取NIC时加上-ExpandProperty NetworkSecurityGroup参数,就能加载完整的NSG对象:

# 获取目标VM对象
$vm = Get-AzVM -ResourceGroupName $azRgName -Name $azVmName
# 获取NIC并展开关联的NSG属性
$nic = Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces[0].Id -ExpandProperty NetworkSecurityGroup
# 提取NSG对象
$nsg = $nic.NetworkSecurityGroup

方法2:从子网获取关联的NSG

如果NSG绑定在子网层级,需要从NIC关联的子网入手:

# 获取VM的NIC对象
$nic = Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces[0].Id
# 获取NIC所属子网的资源ID
$subnetId = $nic.IpConfigurations[0].Subnet.Id
# 获取子网配置并提取NSG的资源ID
$subnetNsgId = (Get-AzVirtualNetworkSubnetConfig -ResourceId $subnetId).NetworkSecurityGroup.Id
# 根据ID获取NSG对象
if ($subnetNsgId) {
    $nsg = Get-AzNetworkSecurityGroup -ResourceId $subnetNsgId
}

方法3:批量查询VM关联的所有NSG

如果不确定NSG绑定在NIC还是子网,可以一次性查询所有关联的NSG:

# 获取VM的NIC资源ID
$nicId = $vm.NetworkProfile.NetworkInterfaces[0].Id
# 获取NIC所属子网的资源ID
$subnetId = (Get-AzNetworkInterface -ResourceId $nicId).IpConfigurations[0].Subnet.Id

# 查询所有关联到NIC或子网的NSG
$relatedNsg = Get-AzNetworkSecurityGroup | Where-Object {
    $_.AssociatedResources -contains $nicId -or $_.AssociatedResources -contains $subnetId
} | Select-Object -Unique

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:42:09