PowerShell выводит список виртуальных каталогов внутри учетной записи хранения Azure

Приведенный ниже сценарий PowerShell предоставляет сведения о каталоге, отфильтрованные по имени каталога «внутренний» и имени тега «Бизнес», а также с именем контейнера «посадочный». Я заметил несколько учетных записей хранения с каталогами проектов внутри каталога «внутренний» и пытался перечислить их все в выходных данных. .

Я тестировал добавление внутреннего префикса к переменной $directory, но это не дало желаемого результата.

Мне нужно перечислить все каталоги внутри родительского каталога с именем Internal в разделе контейнера.

Connect-AzAccount -Tenant 'xxxxx' -UseDeviceAuthentication
# Get all subscriptions
$subscriptions = Get-AzSubscription

# Define the tag key to filter by
$tagKey = "Business"

# Initialize an array to store the results
$results = @()
foreach ($subscription in $subscriptions) {
# Set the current subscription context
Set-AzContext -SubscriptionId $subscription.Id

# Get all storage accounts in the current subscription
$storageAccounts = Get-AzStorageAccount | Where-Object { $_.Tags.ContainsKey($tagKey) }

foreach ($storageAccount in $storageAccounts) {
    # Get the metrics for the storage account
    $resourceId = "/subscriptions/$($subscription.Id)/resourceGroups/$($storageAccount.ResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccount.StorageAccountName)"
    $uri = "https://management.azure.com$resourceId/providers/Microsoft.Insights/metrics?api-version=2023-10-01&metricnames=UsedCapacity&aggregation=Average"

    try {
        $response = Invoke-AzRestMethod -Method Get -Uri $uri
        $metrics = $response.Content | ConvertFrom-Json
        $usedCapacityMetric = $metrics.value | Where-Object { $_.name.value -eq "UsedCapacity" }

        if ($usedCapacityMetric) {
            $averageCapacity = $usedCapacityMetric.timeseries.data.average | Measure-Object -Sum | Select-Object -ExpandProperty Sum
        } else {
            $averageCapacity = 0
        }
    } catch {
        Write-Warning "Failed to retrieve metrics for storage account: $($storageAccount.StorageAccountName)"
        $averageCapacity = 0
    }

    $ctx = $storageAccount.Context
    $containers = Get-AzStorageContainer -Context $ctx | Where-Object { $_.Name -eq "landing" }
    foreach ($container in $containers) {
    $prefix = "internal"
      $blobs = Get-AzStorageBlob -Prefix "internal" -Container $container.Name -Context $ctx
     
      $directories = $blobs |  ForEach-Object {
            $parts = $_.Name.Split('/')
            for ($i = 0; $i -lt $parts.Length - 1; $i++) {
                $parts[0..$i] -join '/'
            }
        } | Sort-Object -Unique

      $results += [PSCustomObject]@{
        #SubscriptionId       = $subscription.Id
        SubscriptionName     = $subscription.Name
        ResourceGroup        = $storageAccount.ResourceGroupName
        StorageAccount       = $storageAccount.StorageAccountName
        ContainerName        = $container.Name
        UsedCapacityInBytes  = $averageCapacity
        TagName              = $tagKey
        TagValue             = $storageAccount.Tags[$tagKey]
        Directories          = $directories -join ", "
       
    }
  }
}
   # Output the results
   $results | Format-Table -AutoSize

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я заметил несколько учетных записей хранения с каталогами проектов внутри каталога «внутренний» и попытался перечислить их все в выходных данных.

В моей среде в моей учетной записи хранения Azure есть каталог с подкаталогами, например zoom/recording/BBS/2024-8-7.

Портал:

Вы можете использовать приведенный ниже скрипт, чтобы получить storage account details (filtered by tags), storage account size, container(filtered by specific container), Particular directory and their subdirectory из отфильтрованных контейнеров.

Скрипт:

Connect-AzAccount -Tenant 'xxxxx' -UseDeviceAuthentication

# Get all subscriptions
$subscriptions = Get-AzSubscription

# Define the tag key to filter by
$tagKey = "createdby"

# Initialize an array to store the results
$results = @()

foreach ($subscription in $subscriptions) {
    # Set the current subscription context
    Set-AzContext -SubscriptionId $subscription.Id

    # Get all storage accounts in the current subscription
    $storageAccounts = Get-AzStorageAccount | Where-Object { $_.Tags.ContainsKey($tagKey) }

    foreach ($storageAccount in $storageAccounts) {
        # Get the metrics for the storage account
        $resourceId = "/subscriptions/$($subscription.Id)/resourceGroups/$($storageAccount.ResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccount.StorageAccountName)"
        $uri = "https://management.azure.com$resourceId/providers/Microsoft.Insights/metrics?api-version=2023-10-01&metricnames=UsedCapacity&aggregation=Average"

        try {
            $response = Invoke-AzRestMethod -Method Get -Uri $uri
            $metrics = $response.Content | ConvertFrom-Json
            $usedCapacityMetric = $metrics.value | Where-Object { $_.name.value -eq "UsedCapacity" }

            if ($usedCapacityMetric) {
                $averageCapacity = $usedCapacityMetric.timeseries.data.average | Measure-Object -Sum | Select-Object -ExpandProperty Sum
            } else {
                $averageCapacity = 0
            }
        } catch {
            Write-Warning "Failed to retrieve metrics for storage account: $($storageAccount.StorageAccountName)"
            $averageCapacity = 0
        }

        $ctx = $storageAccount.Context
        $containers = Get-AzStorageContainer -Context $ctx | Where-Object { $_.Name -eq "test" }

       foreach ($container in $containers) {
          $blobs = Get-AzStorageBlob -Container $container.Name -Context $ctx | Where-Object { $_.Name -like "zoom/*" }

          # Extract unique directories within the "zoom" directory
          $directories = $blobs | ForEach-Object {
                $parts = $_.Name.Split('/')
                for ($i = 0; $i -lt $parts.Length - 1; $i++) {
                    $parts[0..$i] -join '/'
                }
            } | Sort-Object -Unique

          $results += [PSCustomObject]@{
            SubscriptionName     = $subscription.Name
            ResourceGroup        = $storageAccount.ResourceGroupName
            StorageAccount       = $storageAccount.StorageAccountName
            ContainerName        = $container.Name
            UsedCapacityInBytes  = $averageCapacity
            TagName              = $tagKey
            TagValue             = $storageAccount.Tags[$tagKey]
            Directories          = $directories -join ", "
            }
        }
    }
}

# Output the results
$results | Format-Table -AutoSize 

Выход:

SubscriptionName                      ResourceGroup StorageAccount ContainerName UsedCapacityInBytes TagName   TagValue Directories                                                          
----------------                      ------------- -------------- ------------- ------------------- -------   -------- -----------                                                          
xxxxxx xxxxxx xxxxxxxxxx Subscription venkatesan-rg venkat891      test                     45155865 createdby venkat   zoom, zoom/recording, zoom/recording/BBS, zoom/recording/BBS/2024-8-7

Я изменил ваш сценарий на основе приведенного выше сценария и создал ту же структуру папок, но в выходных каталогах указана только папка «увеличение». Также мне нужно избегать перечисления всех файлов и папок внутри, например, в «тестовом» контейнере мне нужно перечислять дочерние каталоги только из каталога «масштаб». В моем случае содержимое папки «zoom» — это каталоги проектов, и это конечный результат, который я ищу.

sudhir karamchand 09.08.2024 13:29

В приведенном выше скрипте перечислены только папки внутри корневого каталога zoom.

Venkatesan 09.08.2024 14:03

Вы пробовали использовать приведенный выше код?

Venkatesan 09.08.2024 14:05
for example in "test" container I have to list child directories only from "zoom" directory. In my case the content in folder "zoom" is project directories and that is the final output I'm looking for. именно это и делает скрипт.
Venkatesan 09.08.2024 14:10

Да, я тестировал тот же код, но не знаю, как загрузить снимок экрана.

sudhir karamchand 09.08.2024 16:36

Можете ли вы поделиться ссылкой на изображение?

Venkatesan 09.08.2024 16:37
imghippo.com/i/dreUs1723214825.jpg imghippo.com/i/CsoES1723214861.png (В этой учетной записи хранения Landing — это имя контейнера, а Internal — корневой каталог, внутри внутреннего корневого каталога у меня создано несколько папок тестового проекта которые необходимо перечислить.
sudhir karamchand 09.08.2024 16:48

В папках project1 есть файлы?

Venkatesan 09.08.2024 17:07

В моей среде я создал ту же папку и использовал тот же код, который был успешно выполнен. i.imgur.com/Am8zjx1.png и вывод: i.imgur.com/deRzYBQ.png

Venkatesan 09.08.2024 17:29

В вашем выводе нет значения использованной мощности, также можете перепроверить скрипт и попробовать один раз? @sudhirkaramchand

Venkatesan 09.08.2024 17:29

Потребовалось некоторое время, чтобы вернуться к этому. Да, решение сработало и дало мне правильный результат, хотя я не уверен, какая была предыдущая ошибка. Спасибо за вашу помощь.

sudhir karamchand 13.08.2024 06:49

Другие вопросы по теме

Похожие вопросы

Развертывание приложения-контейнера Azure из VisualStudio — ошибка 404
Azure Document Intelligence — RequestFailedException: «Ресурс не найден, состояние: 404 (не найдено)»
Как отобразить имя файла вместе со ссылкой в ​​веб-приложении Azure OpenAI
Триггер очереди Azure с настраиваемым именем подключения
Триггер нескольких репозиториев Azure. Почему он срабатывает несколько раз для одной и той же фиксации?
Невозможно воспроизвести приложение на основе холста после его импорта в другую среду/другой клиент (с использованием инструментов сборки Azure DevOps PP)
Azure Pipeline не удается извлечь подмодуль
Подключение к служебной шине из стандартного рабочего процесса приложения логики в сравнении с кодом
Правило оповещения Azure: прыгающее окно (запускать каждые n часов, запрашивать данные за последние n+m часов)
Получить за один вызов всех пользователей в группе, а также количество групп, к которым принадлежит каждый пользователь?