Мне нужно получить сведения об учетной записи хранения с указанием размера во всех подписках на основе значения тега и имени с помощью 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."
}
Попробуйте ниже:
# 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
Добавьте имя и значение тега в результаты, например $results += [PSCustomObject]@{ SubscriptionId = $subscription.Id SubscriptionName = $subscription.Name ResourceGroup = $storageAccount.ResourceGroupName StorageAccount = $storageAccount.StorageAccountName UsedCapacityInBytes = $averageCapacity TagName = $tagKey TagValue = $tagValue }
в приведенном выше скрипте.
Я пробовал то же самое, но это дает мне определенное имя тега и значение тега в переменных. Например, мне нужно определить $tagname как бизнес, а код должен отфильтровать учетные записи хранения и получить выходные данные со сведениями об учетной записи хранения вместе с именем тега и значением тега (без определения значения тега здесь как переменной).
Проверьте обновленный сценарий. Он определит имя тега, отфильтрует учетные записи хранения и получит выходные данные со сведениями об учетной записи хранения, а также именем тега и значением тега.
@ Nolan1513 Nolan1513 Надеюсь, это решит вашу проблему.
Скрипт сработал и смог получить необходимый контент. Спасибо @Venkatesan
@ Nolan1513 Нолан1513 Рад узнать, что это сработало :)
@venkatesan, не могли бы вы предоставить какие-либо данные для вывода списка контейнеров вместе с учетными записями хранения с помощью приведенного выше сценария?
Поднимите его, задав новый вопрос, и добавьте еще баллов, чего вы хотите?
Спасибо, Венкатесан, сценарий выдает результаты для учетных записей хранения, отфильтрованных на основе тегов, но как мне получить имя тега и значение тега в результатах?