来自整个订阅的$ VM变量而不是资源组变量

时间:2018-01-24 14:57:43

标签: powershell azure

我一直在尝试指定和定位资源组中的机器,这是可变的。

我的代码是

[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硬编码名称时似乎有效。

困惑..

请指点什么?

谢谢:)

1 个答案:

答案 0 :(得分:0)

那是因为你混淆了管道和for (x in b)构造。你需要这样做:

$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName

$_在管道内工作,但在for循环中,您可以选择调用当前迭代变量的内容。在您的情况下,$rgforeach ($rg in $rgs)

PS。 我真的在那个问题上输错了吗? nope,我没有;)