如果声明没有像预期的那样工作Powershell

时间:2018-01-28 14:24:55

标签: powershell azure

我已经整理了以下脚本。我想要做的是,如果VM名称类似于 DC SQL ,则将标记设置为$ false,或者如果是其他任何内容,则将标记设置为$ true。

如果我取出If的状态,它工作正常,但它将DC和SQL标记设置为$ true,我想如果我放入If ($vm.name -like *dc*)我可以将标记设置为$ false,对于SQL也是如此

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True)]
   [string]$RG

)
$rgs = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$rg*"} 
foreach ($rg in $rgs) 
{
$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
    foreach ($vm in $vms) 
    {
    if ($vm.Name -like *dc*)
        {
        $tags = $_.Tags
        $tags['ShutdownSchedule_AllowStop'] = "$False";
        Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
        }
    Elseif ($vm.Name -like *SQL*)
        {
        $tags = $_.Tags
        $tags['ShutdownSchedule_AllowStop'] = "$False";
        Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
        }
     Else 
        {
        $tags = $_.Tags
        $tags['ShutdownSchedule_AllowStop'] = "$True";
        Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
        }
    }
}

有效的脚本在

下面
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True)]
   [string]$RG

)

$start = Get-Date
$rgs = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$rg*"} 
foreach ($rg in $rgs) 
{
$vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
    $vms.ForEach({
        $tags = $_.Tags
        $tags['ShutdownSchedule_AllowStop'] = "$True";
        Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
  })
}

我得到的错误是if ($vm.Name -like *dc*)错误是“你必须在*运算符之后提供值表达式”对于SQL来说是相同的。

还有一个错误(这让我很困惑)

    }
}

最后两行在表达式或语句“

”中出现“Unexpected token'}'错误

任何帮助请在我崩溃谷歌之前?

谢谢:)

0 个答案:

没有答案