我一直在尝试指定和定位资源组中的机器,这是可变的。
我的代码是
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string]$RG
)
Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$rg*"}
foreach ($rg in $rgs)
{
$vms = Get-AzureRmVm -ResourceGroupName $_.ResourceGroupName
$vms.ForEach({
$tags = $_.Tags
$tags['ShutdownSchedule_AllowStop'] = "whatever";
Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force
})
}
当我运行时,我得到以下
The variable '$_' cannot be retrieved because it has not been set.
At line:1 char:41
+ $vms = Get-AzureRmVm -ResourceGroupName $_.ResourceGroupName
然而,当我为$ RG硬编码名称时似乎有效。
困惑..
请指点什么?
谢谢:)
答案 0 :(得分:0)
那是因为你混淆了管道和for (x in b)
构造。你需要这样做:
$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
$_
在管道内工作,但在for循环中,您可以选择调用当前迭代变量的内容。在您的情况下,$rg
(foreach ($rg in $rgs)
)
PS。 我真的在那个问题上输错了吗? nope,我没有;)