我正在寻找一个PowerShell命令,该命令用于列出网络接口卡及其关联的应用程序安全组/资源组之间的关系。我使用以下命令,它仅显示VMName,IPAddress。无法显示“应用程序安全组”。
我已经使用-ExpandProperty ApplicationSecurityGroups,但仍然无法使用。
$nics =Get-AzureRmNetworkInterface -ResourceGroupName "My-RG"
foreach($nic in $nics)
{
$vm = $vms | where-object -Property Id -EQ $nic.VirtualMachine.id
$Name = $nic.Name
$prv = $nic.IpConfigurations | select-object -ExpandProperty PrivateIpAddress
$alloc = $nic.IpConfigurations | select-object -ExpandProperty PrivateIpAllocationMethod
$asc = $nic.IpConfigurations | select-object -ExpandProperty ApplicationSecurityGroups
Write-Output "$Name, $prv , $asc"
}
答案 0 :(得分:0)
我刚刚测试了您的命令,并且可以从配置有ASG的计算机上成功获取应用程序安全组。但是,只有将VM放在ASG中才有效,ASG可以在子网内提供微分段,因此您可以将应用程序服务器,数据库等分组在一起,然后将NSG规则应用于组而不是单个服务器
如果相反,您想知道VM所在的NSG,则需要使用其他命令。 NSG是连接到VM或NIC并充当防火墙的资源。如果需要,则需要运行:
$nsg = $nic | select-object -ExpandProperty NetworkSecurityGroup
但是,这只会使您将NSG应用于VM,您也可以将其应用于VM级别,因此最好运行以下命令:
$effectiveRules=Get-AzureRmEffectiveNetworkSecurityGroup -NetworkInterfaceName <nicName> -ResourceGroupName <resourceGroup>
$effectiveRules.NetworSecurityGroup
这将列出在NIC或子网级别应用的所有NSG。
答案 1 :(得分:0)
问题是,您只能从IpConfigurationsText属性获取ASG信息作为字符串,因此您需要将查询更新为:
$nics = Get-AzureRmNetworkInterface -ResourceGroupName "My-RG"
foreach($nic in $nics)
{
$GetAzureNIC = Get-AzureRmNetworkInterface -ResourceGroupName "My-RG" -Name $nic.Name
$Name = $nic.Name
$prv = $nic.IpConfigurations.PrivateIpAddress
$alloc = $nic.IpConfigurations.PrivateIpAllocationMethod
$asgResourceID = ($GetAzureNIC.IpConfigurationsText | ConvertFrom-Json).ApplicationSecurityGroups.Id
$asgName = (Get-AzureRmResource -ResourceId $asgResourceID).Name
Write-Output "$Name, $prv, $alloc, $asgName, $asgResourceID"
}
编辑:我注意到您还希望获得分配方法,但不要在Write-Output中使用它,而是更新查询以包括ASG名称和ASG资源ID,请选择所需的任何一种。