问题描述
我们有一段代码可以在Powershell ISE中完美地运行,但是,当我们在Azure自动化中使用相同的代码时,它将清除标记.
We have a piece of code which works perfectly in Powershell ISE, however when we use the same code in Azure automation, it clears the tags.
$rgs = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$rg*"}
foreach ($rg in $rgs)
{
$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
$vms.ForEach({
$tags = $vm.Tags
$tags['ShutdownSchedule_AllowStop'] = "$False";
Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
})
}
到目前为止,我设法建立的代码是 Set-AzureRmResource -ResourceId $ _.Id -Tag $ tags -Force -Verbose
不会将$ tags视为hastable.我已经进行了一些调试,可以看到 $ tags = $ vm.Tags
是一个哈希表.
What I've managed to establish so far is that the code Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
does not see $tags as a hastable. I've done some debugging and I can see $tags = $vm.Tags
is a hashtable.
我在google上四处浏览,并且看到了一些使用 [system.collections.hashtable]
来指定它是哈希表的提法,但这是我的能力受到限制的地方.我希望有人可以指出正确的方向.
I looked around on google and I've seen a few mentions of using [system.collections.hashtable]
to specify it is a hashtable, but this is where my powershell is limited. I was hoping someone could point me in the right direction.
我尝试做 ResourceId $ _.Id -Tag [system.collections.hashtable] $ tags
,但这没用.
我们试图做的是将标记值从true更改为false.密钥为Shutdown_AllowStop,当前值设置为True.
What we are trying to do is change a tag value from true to false. The Key is Shutdown_AllowStop and the value is currently set to True.
先谢谢了(真的很希望这样):)
Thanks in advance (and really hoping this makes sense) :)
推荐答案
以下脚本对我有用.
$rgs = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like *$rg*"}
foreach ($rg in $rgs)
{
$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
foreach ($vm in $vms)
{
$tags = $vm.Tags
foreach ($tag in $tags)
{
$tag['ShutdownSchedule_AllowStop'] = "$True";
Write-Output ("Showing VM's resource ID " + $vm.ID)
Write-output ("Show VM's tag "+[System.Collections.Hashtable]::new($tag))
$hash = [System.Collections.Hashtable]::new($tag)
$hash['ShutdownSchedule_AllowStop']
Set-AzureRmResource -ResourceId $vm.ID -Tag $hash -ApiVersion "2017-12-01" -Force -Verbose
}
}
}
但是您需要在自动化帐户中更新Azure Power Shell版本,如果不执行此操作,则脚本将不起作用.
But you need update Azure Power Shell version in Automation Account, if you don't do this, the script does not work.
这是我的测试结果.
这篇关于哈希表未在Azure自动化中读取为哈希表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!