Реализация тегов на ресурсах в группе ресурсов с помощью 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.

1 ответ

Решение

Если вы используете $tags_to_apply=(Get-AzureRmResourceGroup -Name $resourceGroupName).tags, $tags_to_apply будет хеш-таблица

Группа ресурсов и ее ресурс уже содержат некоторые теги. Я хочу сохранить эти теги как есть, и если мои новые теги совпадают с существующими, он должен обновить их.

Насколько я понимаю, вы хотите добавить новые элементы в хеш-таблицу, если элемент существует в хеш-таблице, обновите его. Вы можете сослаться на мой пример команды, он отлично работает на моей стороне.

$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"}

Во-вторых, установите 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

Другие вопросы по тегам