【发布时间】: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