Azure Теги выдаются - PullRequest
       0

Azure Теги выдаются

0 голосов
/ 10 января 2020

Я выбираю информацию из файла CSV, и я упомянул такие теги, как @ {"R" = "red"; "B" = "Blue"}. когда я присваиваю тегу значение переменной, он печатает в том же формате, но при добавлении тегов в vm я получаю ошибку ниже,

Set-AzResource : Cannot bind parameter 'Tag'. Cannot convert the "System.Collections.Hashtable" value of type "System.String" to



$tags| convertfrom-stringdata 

, но проблема заключается в запуске команды add tag для Vm, это добавление тега, как показано ниже @ {"r: =" red ";" B "=" Blue "}

Как добавить оба тега в отдельности, например r: red b: blue

$rss = Import-csv "C:\abc\VijayGupta\Desktop\Vm_build_azure.csv"
$tag = $rss.vmtags 
$tags = $tag | ConvertFrom-StringData
$vms=Get-AzResource -Name abc -ResourceGroupName Southindia
Set-AzResource -ResourceId $vms.Id -Tag $tags -Force

1 Ответ

0 голосов
/ 10 января 2020

Если я понимаю вопрос, в вашем CSV-файле есть столбец с именем vmtags. Значения в этом столбце являются строками в виде @{"R"="red";"B"="Blue"}.

Командлет Get-AzResource хочет получить объект Hashtable для своего параметра -Tags. Я думаю, что вы взяли описание MS дает: пары ключ-значение в виде таблицы ha sh. Например: @ {key0 = "value0"; key1 = $ null; key2 = "value2"} здесь слишком буквально, и теперь вам нужно создать фактический объект Hashtable из его строкового представления .

Чтобы создать Hashtable из такой строки, вы можете использовать

# create a scriptblock using the string
$scriptBlock = [scriptblock]::Create('@{"R"="red";"B"="Blue"')
# execute it to create the hashtable
$tags = (& $scriptBlock)

$ tags теперь Hashtable, содержащий

Name                           Value
----                           -----
R                              red
B                              Blue

Если вам нужно создать Hashtable из нескольких строк, сделайте что-то вроде

$vmtags = '@{"R"="red";"B"="Blue"}', '@{"G"="green";"A"="Alpha"}'

# first loop creates the hashtables from the individual strings
$arr = $vmtags | ForEach-Object {
    $scriptBlock = [scriptblock]::Create($_)
    & $scriptBlock
}

# the second loop merges all Hashtables in the array into one
$tags = @{}
$arr | ForEach-Object {
    foreach ($key in $_.Keys) {
        $tags[$key] = $_.$key
    }
}

$ tags теперь является Hashtable, содержащим

Name                           Value
----                           -----
R                              red
B                              Blue
A                              Alpha
G                              green
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...