【问题标题】: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 "--------------------------------------------"
    
    }
    
    

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2021-08-21
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多