Сценарий PowerShell для получения учетной записи хранения Azure на основе имени и значения тега

Мне нужно получить сведения об учетной записи хранения с указанием размера во всех подписках на основе значения тега и имени с помощью PowerShell.

Я использую приведенный ниже модуль Get-Azstorageaccount для получения подробной информации, которая дает мне выходные данные с тегами, но я хочу изменить сценарий для фильтрации с использованием определенного имени и значения тега, а также с размером учетной записи хранения.

# Authenticate to Azure
Connect-AzAccount -Tenant 'xxxxx'-UseDeviceAuthentication
 
# Get all subscriptions in the current tenant
$subscriptions = Get-AzSubscription

# Define the Azure tag name
$tagName = "business"
$tagValue = "xyz"

# Filter storage accounts based on the tag
#$filteredStorageAccounts = $storageAccounts | Where-Object { $_.Tags[$tagName] } 

# Initialize an array to store storage account details
$storageAccounts = @()
 
foreach ($subscription in $subscriptions) {
    Write-Output "Processing subscription $($subscription.Name)..."

    # Set the current subscription context
    Select-AzSubscription -SubscriptionId $subscription.Id | Out-Null
    try {
        
        
        # Get all storage accounts in the subscription (Where-Object { $_.Tags[$tagName] -eq $tagValue })
        
        $storageAccounts += Get-AzStorageAccount | ForEach-Object {
            [PSCustomObject]@{
                SubscriptionName   = $subscription.Name
                ResourceGroupName  = $_.ResourceGroupName
                StorageAccountName = $_.StorageAccountName
                Location           = $_.PrimaryLocation
                AccountType        = $_.AccountType
                CreationTime       = $_.CreationTime
                TagName            = $_.Tags
            }
        }
    }
    catch {
        Write-Error "Error fetching storage accounts in subscription $($subscription.Name): $_"
    }
}
 
# Output the results
if ($storageAccounts) {
    $storageAccounts | Format-Table -AutoSize
}
else {
    Write-Output "No storage accounts found in any subscription."
}
Как установить 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
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте ниже:

# Authenticate to Azure
Connect-AzAccount -Tenant 'xxxxx'-UseDeviceAuthentication
 
# Get all subscriptions in the current tenant
$subscriptions = Get-AzSubscription

# Define the Azure tag name
$tagName = "Owner"
$tagValue = "wenbo"
$storageAccountSkuName = "Standard_RAGRS"

$storageAccounts = @()
 
foreach ($subscription in $subscriptions) {
    Write-Output "Processing subscription $($subscription.Name)..."

    # Set the current subscription context
    Select-AzSubscription -SubscriptionId $subscription.Id | Out-Null
    try {

        $res = Get-AzResource -ResourceType 'microsoft.storage/storageaccounts' -ExpandProperties | Where-Object {$_.Tags.Keys -contains $tagName -and $_.Tags[$tagName] -eq $tagValue} | Where-Object {$_.Sku.Name -eq $storageAccountSkuName} | Select-Object -Property ResourceGroupName, Name,Location, Tags, ResourceType, @{n = 'Size'; e= {$_.Sku.Name}}, @{n = 'CreationTime'; e = {$_.Properties.creationTime}}
        $storageAccounts += $res
    }
    catch {
        Write-Error "Error fetching storage accounts in subscription $($subscription.Name): $_"
    }
}
 
# Output the results
if ($storageAccounts) {
    $storageAccounts | Format-Table -AutoSize
}
else {
    Write-Output "No storage accounts found in any subscription."
}
Ответ принят как подходящий

Сценарий PowerShell для получения учетной записи хранения Azure на основе имени и значения тега.

Вы можете использовать приведенный ниже скрипт для получения учетной записи хранения Azure на основе имени tag и used capacity size.

Скрипт:

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

# Define the tag key and value to filter by
$tagKey = "xxx"
$tagValue = "xxxx"

# 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[$tagKey] -eq $tagValue }

    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=2018-01-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
        }

        # Add the storage account details and size to the results
        $results += [PSCustomObject]@{
            SubscriptionId   = $subscription.Id
            SubscriptionName = $subscription.Name
            ResourceGroup    = $storageAccount.ResourceGroupName
            StorageAccount   = $storageAccount.StorageAccountName
            UsedCapacityInBytes = $averageCapacity
        }
    }
}

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

Выход:

SubscriptionId                       SubscriptionName                      ResourceGroup StorageAccount UsedCapacityInBytes
--------------                       ----------------                      ------------- -------------- -------------------
158b834xxxxxxxxxxxxxxx5-f21815dd048f xxxxxx xxxxxx xxxxxxxxxxx xxxxxxxxxxx venkatesan-rg venkat6781                75622151
158b834xxxxxxxxxxxxxxx5-f21815dd048f xxxxxx xxxxxx xxxxxxxxxxx xxxxxxxxxxx venkatesan-rg venkat891                   543896

Ссылка:

Метрики — Список — REST API (Azure Monitor) | Microsoft Learn

Обновленный скрипт:

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=2018-01-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
        }

        # Add the storage account details, size, and tags to the results
        $results += [PSCustomObject]@{
            SubscriptionId       = $subscription.Id
            SubscriptionName     = $subscription.Name
            ResourceGroup        = $storageAccount.ResourceGroupName
            StorageAccount       = $storageAccount.StorageAccountName
            UsedCapacityInBytes  = $averageCapacity
            TagName              = $tagKey
            TagValue             = $storageAccount.Tags[$tagKey]
        }
    }
}

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

Выход:

SubscriptionId                       SubscriptionName                      ResourceGroup StorageAccount UsedCapacityInBytes TagName   TagValue
--------------                       ----------------                      ------------- -------------- ------------------- -------   --------
15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf xxxxxx xxxxxx xxxxxxxxxx Subscription venkatesan-rg venkat6781                 6123454 createdby venkat  
15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf xxxxxx xxxxxx xxxxxxxxxx Subscription venkatesan-rg venkat891                   693954 createdby venkat  

Спасибо, Венкатесан, сценарий выдает результаты для учетных записей хранения, отфильтрованных на основе тегов, но как мне получить имя тега и значение тега в результатах?

Nolan1513 09.07.2024 07:51

Добавьте имя и значение тега в результаты, например $results += [PSCustomObject]@{ SubscriptionId = $subscription.Id SubscriptionName = $subscription.Name ResourceGroup = $storageAccount.ResourceGroupName StorageAccount = $storageAccount.StorageAccountName UsedCapacityInBytes = $averageCapacity TagName = $tagKey TagValue = $tagValue } в приведенном выше скрипте.

Venkatesan 09.07.2024 07:55

Я пробовал то же самое, но это дает мне определенное имя тега и значение тега в переменных. Например, мне нужно определить $tagname как бизнес, а код должен отфильтровать учетные записи хранения и получить выходные данные со сведениями об учетной записи хранения вместе с именем тега и значением тега (без определения значения тега здесь как переменной).

Nolan1513 09.07.2024 08:04

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

Venkatesan 09.07.2024 08:17

@ Nolan1513 Nolan1513 Надеюсь, это решит вашу проблему.

Venkatesan 09.07.2024 08:24

Скрипт сработал и смог получить необходимый контент. Спасибо @Venkatesan

Nolan1513 11.07.2024 07:34

@ Nolan1513 Нолан1513 Рад узнать, что это сработало :)

Venkatesan 11.07.2024 07:50

@venkatesan, не могли бы вы предоставить какие-либо данные для вывода списка контейнеров вместе с учетными записями хранения с помощью приведенного выше сценария?

Nolan1513 17.07.2024 10:45

Поднимите его, задав новый вопрос, и добавьте еще баллов, чего вы хотите?

Venkatesan 18.07.2024 05:03
stackoverflow.com/questions/78758699/… Проверьте этот ответ. @Нолан1513
Venkatesan 19.07.2024 09:11

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