Azure标签问题

问题描述 投票:0回答:1

我正在从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 

但是问题是在为Vm运行add tag命令之后,它正在添加如下所示的标签@ {“ r:=” red“;” B“ =” Blue“}

我如何将两个标签分别添加为r:红色b:蓝色

$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
powershell tags
1个回答
0
投票

如果我理解问题,则在您的CSV文件中,有一列称为vmtags。该列中的值是@{"R"="red";"B"="Blue"}形式的字符串。

Get-AzResource cmdlet希望为其-Tags参数使用一个Hashtable对象。我认为您采用了MS给出的描述:哈希表形式的键/值对。例如:@ {key0 =“ value0”; key1 = $ null; key2 =“ value2”}那里有些文字,现在您需要根据其字符串表示形式创建一个实际的Hashtable object

要使用类似的字符串创建哈希表

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

$ tags现在是一个包含

的哈希表
Name                           Value
----                           -----
R                              red
B                              Blue

如果需要从多个字符串创建哈希表,请执行类似的操作

$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现在是一个包含

的哈希表
Name                           Value
----                           -----
R                              red
B                              Blue
A                              Alpha
G                              green
© www.soinside.com 2019 - 2024. All rights reserved.