我有一个使用具有键值对的标签安排的资源组:" IncludeInSchedule":" true"
当我做Get-AzureRmResourceGroup -Name MyResourceGroup时,我看到:
ResourceGroupName : MyResourceGroup
Location : northcentralus
ProvisioningState : Succeeded
Tags :
Name Value
================= ======
IncludeInSchedule True
ResourceId : /subscriptions/ea904806-082f-4ce5-9b66-288afd61f83e/resourceGroups/MyResourceGroup
当我尝试将标签中的值读入变量时,我会立即解开。它看起来像一个哈希表,但Get-AzureRmResourceGroup -Name MyResourceGroup | Get-Member Tags
表明它是一个Hashtable数组,我正在读它吗?
Name MemberType Definition
---- ---------- ----------
Tags Property hashtable[] Tags {get;set;}
如果我将Get-AzureRmResourceGroup的输出传输到Select-Object并展开tags属性,我得到:
Name Value
===== =====
Value True
Name IncludeInSchedule
这不是我期望看到的,我期望看到的是:
IncludeInSchedule True
此外,当我尝试将标记分配给变量以便我可以提取IncludeInSchedule值时,我没有看到任何值。
如何从中提取值?
答案 0 :(得分:3)
根据微软的官方文档:Displaying Hash Tables
以下内容应该有效:
> (Get-AzureRmResourceGroup -Name MyResourceGroup).Tags.Value
True
您可以通过以下方式获取所有标签的密钥:
> (Get-AzureRmResourceGroup -Name MyResourceGroup).Tags.Keys
Value
Name
例如,我使用这种方式来访问虚拟机的正常运行时间,如下所示:
> $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $vmName
> $vm.Tags.UptimeMonday
24h
如果您与Microsoft的命名有任何命名冲突,他们会进一步声明:
如果密钥名称与HashTable类型的某个属性名称冲突,则可以使用PSBase访问这些属性。例如,如果键名是键,并且您想要返回键集合,请使用此语法
$hashtable.PSBase.Keys
答案 1 :(得分:0)
是的,Tags
是由hashtable[]
定义的哈希表数组(注意方括号)。
数组中的每个对象都是一个哈希表,如:
$t = @{ Name = "IncludeInSchedule"; Value = "True" }
$t
Name Value
---- -----
Value True
Name IncludeInSchedule
要从对象访问此内容,请使用:
$IncludeInSchedule = ((Get-AzureRmResourceGroup -Name MyResourceGroup).Tags | Where-Object { $_.Name -eq 'IncludeInSchedule'}).Value
#Or
$IncludeInSchedule = (Get-AzureRmResourceGroup -Name MyResourceGroup).Tags | Where-Object { $_.Name -eq 'IncludeInSchedule'} | ForEach-Object { $_.Value }
输出:
PS C:\Users\frode> $IncludeInSchedule
True