使用Powershell在资源组中的资源上实现标签
Implementation of tags on resources in resource group using Powershell
我正在尝试使用 Powershell 在资源和资源组上放置标签。
问题是它删除了现有标签并添加了新标签。
Powershell 脚本 :
Get-AzureRmResourceGroup "testvsoRG" | Set-AzureRmResourceGroup -Tag @{Environment="UAT";Location="USA";DNS="www.xyz.com";Timezone="PST";Phase="Live"}
$resourceGroupName="testvsoRG"
$tags_to_apply=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
Find-AzureRmResource -ResourceGroupName $resourceGroupName | foreach
{
Set-AzureRmResource -ResourceId $_.resourceid -Tag $tags_to_apply -Force
}
我想要的
假设我有 3 个标签。我将提供资源组,它应该将这 3 个标签添加到资源组及其资源中。资源组及其资源中已经有一些标签。我想保留这些标签,如果我的新标签与现有标签匹配,那么它应该更新它。
仅资源组
$h = @{1="one";2="two";3="three"}
$resourceGroupName="testvsoRG"
$group=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
foreach ($key in $group.Keys)
{
if ($h.ContainsKey($key))
{
$group.Remove($key)
}
}
$group += $h
write-host $group
错误
System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.
Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry
在 Azure 资源组资源中添加标签
$resources = Get-AzureRmResource -ResourceGroupName $resourceGroupName
foreach ($r in $resources)
{
$resourcetags = (Get-AzureRmResource -ResourceId $r.ResourceId).Tags
foreach ($rkey in $resourcetags.Keys)
{
if ($h.ContainsKey($rkey))
{
$resourcetags.Remove($rkey)
}
}
$resourcetags += $h
Set-AzureRmResource -Tag $resourcetags -ResourceId $r.ResourceId -Force
}
错误
Get-AzureRmResource : Parameter set cannot be resolved using the specified named parameters.
如果您使用 $tags_to_apply=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
,$tags_to_apply
将是一个散列 table。
The resource group and its resource already have some tags in it. I want to keep those tags as it is and if my new tags matches the existing ones then it should update it.
据我了解,您想在哈希table中添加新项目,如果该项目存在于哈希table中,请更新它。您可以参考我的示例命令,它在我这边运行良好。
$hashtable = @{1="one";2="two";3="three"}
$h = @{4="four";2="two2"}
foreach($key in $($hashtable.keys)){
if ($h.ContainsKey($key)){
$hashtable.Remove($key)
}
}
$hashtable += $h
更新:
可能是int
和string
混用造成的,因为键名,我改了键名,没问题
首先,设置 Tag
.
$resourceGroupName = "resourceGroupName"
Set-AzureRmResourceGroup -Name $resourceGroupName -Tag @{tag1="one";tag2="two2";tag3="three"}
其次,使用新散列table设置Tag
。
$h = @{tag2="two";tag4="four"}
$resourceGroupName="resourceGroupName"
$group=(Get-AzureRmResourceGroup -Name $resourceGroupName).Tags
foreach($key in $($group.keys))
{
if(!$key){
if ($h.ContainsKey($key)){
$group.Remove($key)
}
}
}
$group += $h
Set-AzureRmResourceGroup -Name $resourceGroupName -Tag $group
我正在尝试使用 Powershell 在资源和资源组上放置标签。 问题是它删除了现有标签并添加了新标签。
Powershell 脚本 :
Get-AzureRmResourceGroup "testvsoRG" | Set-AzureRmResourceGroup -Tag @{Environment="UAT";Location="USA";DNS="www.xyz.com";Timezone="PST";Phase="Live"}
$resourceGroupName="testvsoRG"
$tags_to_apply=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
Find-AzureRmResource -ResourceGroupName $resourceGroupName | foreach
{
Set-AzureRmResource -ResourceId $_.resourceid -Tag $tags_to_apply -Force
}
我想要的 假设我有 3 个标签。我将提供资源组,它应该将这 3 个标签添加到资源组及其资源中。资源组及其资源中已经有一些标签。我想保留这些标签,如果我的新标签与现有标签匹配,那么它应该更新它。
仅资源组
$h = @{1="one";2="two";3="three"}
$resourceGroupName="testvsoRG"
$group=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
foreach ($key in $group.Keys)
{
if ($h.ContainsKey($key))
{
$group.Remove($key)
}
}
$group += $h
write-host $group
错误
System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.
Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry
在 Azure 资源组资源中添加标签
$resources = Get-AzureRmResource -ResourceGroupName $resourceGroupName
foreach ($r in $resources)
{
$resourcetags = (Get-AzureRmResource -ResourceId $r.ResourceId).Tags
foreach ($rkey in $resourcetags.Keys)
{
if ($h.ContainsKey($rkey))
{
$resourcetags.Remove($rkey)
}
}
$resourcetags += $h
Set-AzureRmResource -Tag $resourcetags -ResourceId $r.ResourceId -Force
}
错误
Get-AzureRmResource : Parameter set cannot be resolved using the specified named parameters.
如果您使用 $tags_to_apply=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags
,$tags_to_apply
将是一个散列 table。
The resource group and its resource already have some tags in it. I want to keep those tags as it is and if my new tags matches the existing ones then it should update it.
据我了解,您想在哈希table中添加新项目,如果该项目存在于哈希table中,请更新它。您可以参考我的示例命令,它在我这边运行良好。
$hashtable = @{1="one";2="two";3="three"}
$h = @{4="four";2="two2"}
foreach($key in $($hashtable.keys)){
if ($h.ContainsKey($key)){
$hashtable.Remove($key)
}
}
$hashtable += $h
更新:
可能是int
和string
混用造成的,因为键名,我改了键名,没问题
首先,设置 Tag
.
$resourceGroupName = "resourceGroupName"
Set-AzureRmResourceGroup -Name $resourceGroupName -Tag @{tag1="one";tag2="two2";tag3="three"}
其次,使用新散列table设置Tag
。
$h = @{tag2="two";tag4="four"}
$resourceGroupName="resourceGroupName"
$group=(Get-AzureRmResourceGroup -Name $resourceGroupName).Tags
foreach($key in $($group.keys))
{
if(!$key){
if ($h.ContainsKey($key)){
$group.Remove($key)
}
}
}
$group += $h
Set-AzureRmResourceGroup -Name $resourceGroupName -Tag $group