1. 程式人生 > >[Azure]使用Powershell輸出Azure訂閱下所有虛擬機器的ACL資訊

[Azure]使用Powershell輸出Azure訂閱下所有虛擬機器的ACL資訊

這個指令碼可以用來輸出訂閱下所有虛擬機器的ACL資訊(ASM模式),執行指令碼前需要匯入訂閱或者使用Add-AzureAccount -Environment AzureChinaCloud來登陸。

指令碼如下:

# 設定訂閱ID
Select-AzureSubscription -SubscriptionName "XXXXXXXX";

# 獲取當前預設訂閱下所有的虛擬機器
$vms = Get-AzureVM;

# 獲取虛擬機器數量
$vmCount = $vms.Count;

$aclRules = New-Object System.Collections.ArrayList;

# 遍歷所有的虛擬機器
for($i=0; $i -lt $vmCount; $i++)
{
    # 獲取虛擬機器物件
    $vm = $vms[$i];

    # 獲取這個虛擬機器的所有端點
    $endpoints = Get-AzureEndpoint -VM $vm;

    # 遍歷所有端點
    foreach($endpoint in $endpoints)
    {
        # 獲取端點的ACL資訊
        $rules = $endpoint.Acl.Rules;

        # 判斷如果端點沒有任何ACL資訊,就不輸出
        if ($rules.Count -gt 0)
        {
            foreach($rule in $rules)
            {
                $aclRules.Add(@{CloudService=$vm.ServiceName; VMName=$vm.Name; EndpointName=$endpoint.Name; PublicPort=$endpoint.Port; LocalPort=$endpoint.LocalPort; Protocol=$endpoint.Protocol; VIP=$endpoint.Vip; RuleName=$rule.Description; RemoteSubnet=$rule.RemoteSubnet; Access=$rule.Action; Priority=$rule.Order;});
            }
        }
    }
} 

$aclRules | Select @{Name="CloudService"; Expression={$_["CloudService"]}}, @{Name="VMName";Expression={$_["VMName"]}}, @{Name="EndpointName"; Expression={$_["EndpointName"]}}, @{Name="PublicPort"; Expression={$_["PublicPort"]}}, @{Name="LocalPort"; Expression={$_["LocalPort"]}}, @{Name="Protocol"; Expression={$_["Protocol"]}}, @{Name="VIP"; Expression={$_["VIP"]}}, @{Name="RuleName"; Expression={$_["RuleName"]}}, @{Name="RemoteSubnet"; Expression={$_["RemoteSubnet"]}}, @{Name="Access"; Expression={$_["Access"]}}, @{Name="Priority"; Expression={$_["Priority"]}} | Out-GridView;

執行結果截圖: