如何使用 powershell 从所有订阅中列出 Azure 网络安全组
How to List Azure Network Security Group from all Subscription using powershell
我正在尝试创建一个 PowerShell 脚本来列出 Azure 网络安全组及其所有订阅的规则并将其导出到 CSV。
下面是我的代码,其中列出了所有 NSG 规则名称、描述、优先级、SourceAddressPrefix、SourcePortRange、DestinationAddressPrefix、DestinationPortRange、协议、访问和方向。
############# List All Azure Network Security Groups #############
$subs = Get-AzSubscription
foreach ($sub in $subs) {
Select-AzSubscription -SubscriptionId $sub.Id
$nsgs = Get-AzNetworkSecurityGroup
Foreach ($nsg in $nsgs) {
$nsgRules = $nsg.SecurityRules
foreach ($nsgRule in $nsgRules) {
$nsgRule | Select-Object @{n='SubscriptionName';e={$sub.Name}},
@{n='ResourceGroupName';e={$nsg.ResourceGroupName}},
@{n='NetworkSecurityGroupName';e={$nsg.Name}},
Name,Description,Priority,
@{Name='SourceAddressPrefix';Expression={[string]::join(",", ($_.SourceAddressPrefix))}},
@{Name='SourcePortRange';Expression={[string]::join(",", ($_.SourcePortRange))}},
@{Name='DestinationAddressPrefix';Expression={[string]::join(",", ($_.DestinationAddressPrefix))}},
@{Name='DestinationPortRange';Expression={[string]::join(",", ($_.DestinationPortRange))}},
Protocol,Access,Direction |
Export-Csv "C:\Users\admin-vishal.singh\Desktop\Test\nsg\NsgRules.csv" -NoTypeInformation -Encoding ASCII -Append
}
}
}
我为上面的脚本得到的输出
我还尝试调用 object 资源组,$nsgRule 下的 SubscriptionName | Select-Object 它给了我空白列 header Resourcegroup, subscriptionName.
我正在尝试获得这样的输出:
我不知道我需要在哪个 for 循环中进行更改才能获得如上所示的输出。
基本上,我试图列出所有 Azure NSG,其中包含来自所有订阅的规则以及相应的 ResourcegroupName、subscriptionName。
您想要 return 的额外属性与 $nsgRule
属于不同的对象。您仍然可以通过使用 Select-Object
的计算属性来检索这些属性。
$subs = Get-AzureRmSubscription
foreach ($sub in $subs) {
Select-AzureRmSubscription -SubscriptionId $sub.Id
$nsgs = Get-AzureRmNetworkSecurityGroup
Foreach ($nsg in $nsgs) {
$nsgRules = $nsg.SecurityRules
foreach ($nsgRule in $nsgRules) {
$nsgRule | Select-Object @{n='SubscriptionName';e={$sub.Name}},
@{n='ResourceGroupName';e={$nsg.ResourceGroupName}},
@{n='NetworkSecurityGroupName';e={$nsg.Name}},
Name,Description,Priority,
@{Name='SourceAddressPrefix';Expression={[string]::join(",", ($_.SourceAddressPrefix))}},
@{Name='SourcePortRange';Expression={[string]::join(",", ($_.SourcePortRange))}},
@{Name='DestinationAddressPrefix';Expression={[string]::join(",", ($_.DestinationAddressPrefix))}},
@{Name='DestinationPortRange';Expression={[string]::join(",", ($_.DestinationPortRange))}},
Protocol,Access,Direction |
Export-Csv "C:\Vishal\NsgRules.csv" -NoTypeInformation -Encoding ASCII -Append
}
}
}
$nsg
包含 ResourceGroupName
和 Name
(网络安全组名称)。 $sub
包含订阅名称 Name
。
不确定这是否有帮助...我正在做类似的事情并使用 az cli(它可以直接转换为 powershell)
我正在采用这种方法:
#get all the subs in a list
$subs_list = az account list --query [].[id] -o tsv
#loop through list of subs
foreach($sub in $subs_list)
{
az account set --subscription $sub # change the active sub
$rg_list = az group list | ConvertFrom-json # retrieve a list of resource groups for that sub
foreach($rg in $rg_list) # loop through the list of resource groups
{
$nsg_list = az network nsg list --resource-group $rg.name | ConvertFrom-json # get the list of nsg for a resource group
foreach($nsg in $nsg_list) # loop through the list of nsg
{
$nsg_rules = az network nsg rule list --nsg $nsg.name --resource-group $rg.name -o table # get a list of rules for each nsg
$nsg_rules # print the rules to screen
}
}
}
您必须弄清楚如何格式化它,但您现在通过 $rg.name 或 $rg.id 在 $sub 中拥有订阅对象,在 $rg 中拥有资源组。 ..
希望对您有所帮助,我也是新手,这是我在这里回答的第一个问题:)
我正在尝试创建一个 PowerShell 脚本来列出 Azure 网络安全组及其所有订阅的规则并将其导出到 CSV。
下面是我的代码,其中列出了所有 NSG 规则名称、描述、优先级、SourceAddressPrefix、SourcePortRange、DestinationAddressPrefix、DestinationPortRange、协议、访问和方向。
############# List All Azure Network Security Groups #############
$subs = Get-AzSubscription
foreach ($sub in $subs) {
Select-AzSubscription -SubscriptionId $sub.Id
$nsgs = Get-AzNetworkSecurityGroup
Foreach ($nsg in $nsgs) {
$nsgRules = $nsg.SecurityRules
foreach ($nsgRule in $nsgRules) {
$nsgRule | Select-Object @{n='SubscriptionName';e={$sub.Name}},
@{n='ResourceGroupName';e={$nsg.ResourceGroupName}},
@{n='NetworkSecurityGroupName';e={$nsg.Name}},
Name,Description,Priority,
@{Name='SourceAddressPrefix';Expression={[string]::join(",", ($_.SourceAddressPrefix))}},
@{Name='SourcePortRange';Expression={[string]::join(",", ($_.SourcePortRange))}},
@{Name='DestinationAddressPrefix';Expression={[string]::join(",", ($_.DestinationAddressPrefix))}},
@{Name='DestinationPortRange';Expression={[string]::join(",", ($_.DestinationPortRange))}},
Protocol,Access,Direction |
Export-Csv "C:\Users\admin-vishal.singh\Desktop\Test\nsg\NsgRules.csv" -NoTypeInformation -Encoding ASCII -Append
}
}
}
我为上面的脚本得到的输出
我还尝试调用 object 资源组,$nsgRule 下的 SubscriptionName | Select-Object 它给了我空白列 header Resourcegroup, subscriptionName.
我正在尝试获得这样的输出:
我不知道我需要在哪个 for 循环中进行更改才能获得如上所示的输出。
基本上,我试图列出所有 Azure NSG,其中包含来自所有订阅的规则以及相应的 ResourcegroupName、subscriptionName。
您想要 return 的额外属性与 $nsgRule
属于不同的对象。您仍然可以通过使用 Select-Object
的计算属性来检索这些属性。
$subs = Get-AzureRmSubscription
foreach ($sub in $subs) {
Select-AzureRmSubscription -SubscriptionId $sub.Id
$nsgs = Get-AzureRmNetworkSecurityGroup
Foreach ($nsg in $nsgs) {
$nsgRules = $nsg.SecurityRules
foreach ($nsgRule in $nsgRules) {
$nsgRule | Select-Object @{n='SubscriptionName';e={$sub.Name}},
@{n='ResourceGroupName';e={$nsg.ResourceGroupName}},
@{n='NetworkSecurityGroupName';e={$nsg.Name}},
Name,Description,Priority,
@{Name='SourceAddressPrefix';Expression={[string]::join(",", ($_.SourceAddressPrefix))}},
@{Name='SourcePortRange';Expression={[string]::join(",", ($_.SourcePortRange))}},
@{Name='DestinationAddressPrefix';Expression={[string]::join(",", ($_.DestinationAddressPrefix))}},
@{Name='DestinationPortRange';Expression={[string]::join(",", ($_.DestinationPortRange))}},
Protocol,Access,Direction |
Export-Csv "C:\Vishal\NsgRules.csv" -NoTypeInformation -Encoding ASCII -Append
}
}
}
$nsg
包含 ResourceGroupName
和 Name
(网络安全组名称)。 $sub
包含订阅名称 Name
。
不确定这是否有帮助...我正在做类似的事情并使用 az cli(它可以直接转换为 powershell)
我正在采用这种方法:
#get all the subs in a list
$subs_list = az account list --query [].[id] -o tsv
#loop through list of subs
foreach($sub in $subs_list)
{
az account set --subscription $sub # change the active sub
$rg_list = az group list | ConvertFrom-json # retrieve a list of resource groups for that sub
foreach($rg in $rg_list) # loop through the list of resource groups
{
$nsg_list = az network nsg list --resource-group $rg.name | ConvertFrom-json # get the list of nsg for a resource group
foreach($nsg in $nsg_list) # loop through the list of nsg
{
$nsg_rules = az network nsg rule list --nsg $nsg.name --resource-group $rg.name -o table # get a list of rules for each nsg
$nsg_rules # print the rules to screen
}
}
}
您必须弄清楚如何格式化它,但您现在通过 $rg.name 或 $rg.id 在 $sub 中拥有订阅对象,在 $rg 中拥有资源组。 ..
希望对您有所帮助,我也是新手,这是我在这里回答的第一个问题:)