【问题标题】:How to get TAG value for Azure Subscription with PowerShell如何使用 PowerShell 获取 Azure 订阅的 TAG 值
【发布时间】:2020-05-26 08:57:12
【问题描述】:
我可以在 Azure 门户中为我的各种 Azure 订阅分配和查看“标签”值。
但是,当我使用 PowerShell 查询这些订阅时,我找不到与“标签”相关的属性。
这似乎很奇怪,因为“标签”被列为所有 PowerShell ResourceGroup 对象的属性,并且资源本身也具有“标签”属性。
如果我可以通过 Azure 门户分配和查看“标签”,为什么我不能在订阅级别查询它们?
一定有办法的。
【问题讨论】:
标签:
azure
powershell
tags
subscription
【解决方案1】:
您可以使用 Get-AzTag 获取标签。订阅的 ResourceId 是 /subscriptions/
将下面的 替换为您的订阅名称
$subscription = Get-Subscription -SubscriptionName <subscriptionName>
$tags = Get-AzTag -ResourceId /subscriptions/$subscription
示例:
Tags output example
你通过
获取标签的值
$tags.Properties.TagsProperty['<TagKey>']
获取标签值示例:Get tag value when key is known
如果你想遍历标签,你可以这样做
foreach($tagKey in $tags.Properties.TagsProperty.Keys) {
# $tagKey contains the tag key
$tagValue = $tags.Properties.TagsProperty[$tagKey]
Write-Host "$($tagKey):$($tagValue)"
}
示例脚本:
param (
[Parameter(Mandatory = $false)]
[string] $SubscriptionName,
[Parameter(Mandatory = $false)]
[PSCredential] $Credential
)
if ($Credential) {
[void] (Connect-AzAccount -Credential $Credential)
}
else {
[void] (Connect-AzAccount)
}
$subscription = Get-AzSubscription -SubscriptionName $SubscriptionName
if (!$subscription) {
Write-Output "No subscription named '$($SubscriptionName) was found'"
exit
}
$tags = Get-AzTag -ResourceId /subscriptions/$subscription
foreach($tagKey in $tags.Properties.TagsProperty.Keys) {
$tagValue = $tags.Properties.TagsProperty[$tagKey]
Write-Host "$($tagKey):$($tagValue)"
}
【解决方案2】:
根据我的测试,我们可以使用下面的rest api来获取Azure订阅的标签。更多详情请参考https://docs.microsoft.com/en-us/rest/api/resources/tags/getatscope#get-tags-on-a-subscription。
GET https://management.azure.com/subscriptions/<subscription id>/providers/Microsoft.Resources/tags/default?api-version=2019-10-01
例如
$tenantId="<tenant id>"
Connect-AzAccount -Tenant $tenantId
$resource="https://management.core.windows.net/"
$context=Get-AzContext
$token=$context.TokenCache.ReadItems() |Where-Object { ($_.TenantId -eq $tenantId) -and ($_.Resource -eq $resource) }
$accesstoken=$token.AccessToken
# get the subscription in the tenant
$subs = Get-AzSubscription -TenantId $tenantId
foreach($sub in $subs){
$url = "https://management.azure.com/subscriptions/$sub/providers/Microsoft.Resources/tags/default?api-version=2019-10-01"
$result = Invoke-RestMethod -Uri $url -Method Get -Headers @{"Authorization" = "Bearer $accesstoken"}
$result.properties
Write-Host "--------------------------------------------"
}