【问题标题】:List all Storage Accounts and containers in Aure w/Powershell使用/Powershell 列出 Azure 中的所有存储帐户和容器
【发布时间】:2021-04-16 13:22:33
【问题描述】:

我是 Powershell 的新手。我的任务是为我们的一项 Azure 订阅列出所有存储帐户以及所有底层容器。因此,我查看了是否存在脚本,但找不到。然后,我着手对最初用于不同事物的一个进行大量修改。认为这将是一个很好的学习练习。

所以我希望我的脚本完成订阅,列出所有存储帐户,然后检查每个存储帐户以列出其中的所有容器。有几十个帐户要通过,每个帐户都有多个容器。完成后,将其放入格式化的 CSV。

到目前为止,我可以获得输出存储帐户的脚本,但仅此而已。为了以防万一,我会在自己的测试环境中运行它,然后再进行实时测试。

希望有人能指出我做错了什么。

脚本如下:

##################################################
# Gather storage account information 
#     across all subscriptions
##################################################

Write-Host "Gathering storage account information...`n"

[System.Collections.ArrayList]$saUsage = New-Object -TypeName System.Collections.ArrayList

# Loop through each subscription
foreach ($subscriptionId in $SubscriptionIDs) {

# Set context to the subscription
Select-AzSubscription -SubscriptionId $subscriptionID | Out-Null
$context = Get-AzContext
Write-Host "The subscription context is set to: $($context.Name)`n"
$storageAccounts = Get-AzResource -ResourceType 'Microsoft.Storage/storageAccounts' 
$containers = Get-AzResource -ResourceType 
'Microsoft.Storage/storageAccounts/blobServices/containers'
}
# Check the account can access storage accounts within the subscription
if (!$storageAccounts) {
    Write-Host -ForegroundColor Red "Account '$($context.Account.Id)' does not have access to any 
storage accounts in subscription '$($context.Name)'"
    $storageAccounts | Format-Table StorageAccountName, ResourceGroupName, Location
    continue
}

Write-Host "Progress Status:"
[int]$i = 1

遍历每个存储帐户并收集使用信息

    foreach ($storageAccount in $storageAccounts) {

        Write-Host "[$i of $($storageAccounts.Count)] $($storageAccount.Name)"
        $i++

收集存储帐户详细信息并存储为 PS 自定义对象

            $StorageAccountDetails = [ordered]@{
                SubscriptionName = $context.Subscription.Name
                SubscrpitionID = $context.Subscription.Id
                StorageAccountName = $storageAccount.Name
                ContainerName = $container.containerName
                ResourceGroup = $storageAccount.ResourceGroupName
                Location = $storageAccount.Location
        }
        $saUsage.add((New-Object psobject -Property $StorageAccountDetails)) | Out-Null
    }
    foreach($container in $storageAccount.BlobContainersOperationsExtensions.get) {
        if($container.containerName) {
   
# Gather storage account container details  and store as a PS custom object

        $StorageAccountDetails = [ordered]@{
            SubscriptionName = $context.Subscription.Name
            SubscrpitionID = $context.Subscription.Id
            StorageAccountName = $storageAccount.Name
            ContainerName = $container.containerName
            ResourceGroup = $storageAccount.ResourceGroupName
            Location = $storageAccount.Location
        }
}

        $saUsage.add((New-Object psobject -Property $StorageAccountDetails)) | Out-Null
    
} 

# Output storage account usage results to .CSV
if($saUsage) {
# Output to CSV
$saUsage | Export-Csv -Path $SAOutputPath -NoTypeInformation
Write-Output "`nExported storage account usage report at $SAOutputPath`n"
}

【问题讨论】:

    标签: azure powershell


    【解决方案1】:

    关于问题,请参考以下脚本

    $context = Get-AzContext
    
    $storageAccounts = Get-AzResource -ResourceType 'Microsoft.Storage/storageAccounts' 
    
    [System.Collections.ArrayList]$saUsage = New-Object -TypeName System.Collections.ArrayList
    
     foreach ($storageAccount in $storageAccounts) {
    
       #list containers
       $conatiners= Get-AzRmStorageContainer -ResourceGroupName $storageAccount.ResourceGroupName -StorageAccountName $storageAccount.Name
    
         if($conatiners -ne $null){
              foreach($container in $conatiners){
                $StorageAccountDetails = [ordered]@{
                        SubscriptionName = $context.Subscription.Name
                        SubscrpitionID = $context.Subscription.Id
                        StorageAccountName = $storageAccount.Name
                        ContainerName = $container.Name
                        ResourceGroup = $storageAccount.ResourceGroupName
                        Location = $storageAccount.Location
                   }
                 $saUsage.add((New-Object psobject -Property $StorageAccountDetails))  | Out-Null   
                }     
          }else{
          
            $StorageAccountDetails = [ordered]@{
                    SubscriptionName = $context.Subscription.Name
                    SubscrpitionID = $context.Subscription.Id
                    StorageAccountName = $storageAccount.Name
                    ContainerName = $null
                    ResourceGroup = $storageAccount.ResourceGroupName
                    Location = $storageAccount.Location      
             }
            $saUsage.add((New-Object psobject -Property $StorageAccountDetails)) | Out-Null
         }     
    }
    $saUsage | Export-Csv -Path e:\test.csv -NoTypeInformation
    
    

    【讨论】:

    • 非常感谢!脚本现在运行良好。在使用 get-AzStorageContainer 模块时,我开始尝试处理动态变量,但在尝试将变量调用为每个存储帐户的上下文时遇到了实际问题。
    猜你喜欢
    • 2021-10-10
    • 2022-01-22
    • 2018-11-12
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2017-06-20
    相关资源
    最近更新 更多