여러 구독에서 모든 VNet 및 서브넷 나열

네트워크 스프롤(Network sprawl)은 모든 사람에게 발생했습니다. 온프레미스 네트워크와 가상 네트워크가 있을 수 있으며 여러 클라우드에 있을 수도 있으며 어느 시점에서 범위와 용도를 잃어버렸을 수도 있습니다. 일반적으로 이러한 범위는 IP 범위(IPAM 솔루션 권장)를 담당하는 사람이 제공하지만 여러 구독에서 VNet을 만드는 팀이 많은 경우에는 어떻게 됩니까? 글쎄, 그것은 빨리 손에서 벗어날 수 있습니다.

스크립트



이 스크립트가 어떻게 작동하는지 배우고 싶다면 코드 다음에 블로그 게시물을 계속하겠습니다. 스크립트를 실행하려는 사람들을 위해 여기로 이동합니다.

Get-AzSubscription | Foreach-Object {
    $sub = Set-AzContext -SubscriptionId $_.SubscriptionId
    $vnets = Get-AzVirtualNetwork

    foreach ($vnet in $vnets) {
        [PSCustomObject]@{
            Subscription = $sub.Subscription.Name
            Name = $vnet.Name
            Vnet = $vnet.AddressSpace.AddressPrefixes -join ', '
            Subnets = $vnet.Subnets.AddressPrefix -join ', '
        }
    }
} | Export-Csv -Delimiter ";" -Path "AzureVnet.csv"



이렇게 하면 결과가 CSV로 내보내지지만 원하지 않는 경우 마지막 파이프와 cmdlet Export-Csv를 제거할 수 있습니다.

Az 모듈이 설치되어 있어야 합니다. 또한 최소한 모든 구독 및 네트워크 리소스를 읽을 수 있는 계정으로 Azure에 연결해야 합니다.

스크립트 작동 방식



모든 구독을 사용할 수 있게 하고 for 각 루프를 통해 하나씩 실행하는 것으로 시작합니다. 따라서 모든 구독에 대해 활성 컨텍스트를 해당 구독으로 설정하고 해당 구독의 모든 가상 네트워크로 변수$vnets를 채웁니다.
$vnets 변수에서 VNet당 하나의 새 PSCustomObject를 만드는 각 루프에 대해 또 다른 작업을 실행합니다. 이것이 우리가 정보를 표현하는 방법이며 처음 몇 가지 값이 의미가 있습니다. 구독을 현재 구독의 이름으로 설정하고 Vnet의 이름을 이름 필드로 설정합니다.

VNet 주소 공간 및 서브넷의 경우 $vnet의 값을 가리키기만 하면 됩니다. 터미널에서 결과를 원할 경우 완벽하게 작동합니다. 내가 원하는 것은 이것을 CSV로 내보내서 목록이 필요한 사람과 공유할 수 있도록 하는 것입니다. 이 값을 내보내려고 하고 둘 이상이면 IP 범위가 아니라 텍스트 System.Collections.Generic.List 를 받게 됩니다.

이 문제를 해결하려면 원하는 값을 참조하고 join operator을 사용하여 모든 값을 쉼표로 구분하여 결합합니다. 또한 읽기 쉽게 하기 위해 쉼표 뒤에 공백을 추가했습니다. VNet 주소 공간과 서브넷은 여러 값이 될 수 있으므로 두 값 모두에 조인 연산자를 사용해야 했습니다.

좋은 웹페이지 즐겨찾기