我正在尝试创建一个PowerShell脚本,以列出所有订阅的Azure网络安全组及其规则,并将其导出为CSV文件。
以下是我的代码,它列出了所有NSG规则名称、描述、优先级、源地址前缀、源端口范围、目标地址前缀、目标端口范围、协议、访问和方向。
上述脚本的输出如下图所示:
我还尝试在$nsgRule | Select-Object下调用Resourcegroup、SubscriptionName对象,但是它给出了带有Resourcegroup、subscriptionName标题的空列。
我想要的输出结果如下图所示:
我不知道需要在哪个for循环中进行更改才能得到上述输出。基本上,我正在尝试列出所有Azure NSG和来自所有订阅的规则,以及它们各自的ResourcegroupName和subscriptionName。
以下是我的代码,它列出了所有NSG规则名称、描述、优先级、源地址前缀、源端口范围、目标地址前缀、目标端口范围、协议、访问和方向。
############# 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
}
}
}
上述脚本的输出如下图所示:
![enter image description here](https://istack.dev59.com/1CeqV.webp)
我想要的输出结果如下图所示:
![enter image description here](https://istack.dev59.com/46QLs.webp)
./Azurecli-nsg.ps1 "nsg list"
出现以下错误 admin-vishal_singh@Azure:~/clouddrive$ ./Azurecli-nsg.ps1 "nsg list" ./Azurecli-nsg.ps1: 第2行:=: 找不到命令 ./Azurecli-nsg.ps1: 第3行:$'\r': 找不到命令 ./Azurecli-nsg.ps1: 第4行:附近的语法错误$sub' '/Azurecli-nsg.ps1: 第4行:
foreach ($sub in $subs) { - undefined