我正在从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
如果我理解问题,则在您的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