工作流错误"unexpected Token"



我有下面的工作流程,每当我尝试将其放入工作流程时,我都会发现错误。

如果我将其从工作流程中取出,它就可以工作,我想知道我是否缺少一些不正确的语法,或者即使工作流程中不允许这样做。

抱歉,我对工作流程的了解有限(正如您可能知道的那样(。我最终试图让 VM 并行启动。

workflow Set-AzureRmTags-and-Start {
    [CmdletBinding()]
    Param(
    [Parameter(Mandatory=$True)]
    [string]$VmRG
    )
    $Start = Get-Date
    Write-Output "Time is" $Start
    $VmRGs = Get-AzureRmResourceGroup | Where-Object { $_.ResourceGroupName -like "*$VmRG*" }
    foreach ($VmRG in $VmRGs) {
        $VMs = Get-AzureRmVM -ResourceGroupName $VmRG.ResourceGroupName
        ForEach ($vm in $vms) {
            $tags2 = $_.Tags
            $tags2 ['ShutdownSchedule_AllowStop'] = "$False"; 
        }
        Set-AzureRmResource -ResourceName $vm.Name -ResourceGroupName $vm.ResourceGroupName -ResourceType "Microsoft.Compute/virtualMachines" -Tag $tags2 -Force -Verbose
    }
    $Middle = Get-Date
    Write-Output "Time Taken To Assign Tags" ($Middle - $Start).Minutes "Minutes"
    ForEach -Parallel ($vm in $vms) {
        Start-AzureRmVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Verbose -Confirm:$false
    }
    $End = Get-Date
    Write-Output "Time Taken To Start VMs" ($End - $Middle).Minutes "Minutes"
    Write-Output "Total Time Taken" ($End - $Start).Minutes "Minutes"
}

该错误大约['ShutdownSchedule_AllowStop'] = "$False"; }错误"表达式或语句中出现意外令牌"。

任何想法我该如何纠正这一点?

提前谢谢。

$VmRGs = Get-AzureRmResourceGroup | Where-Object { $_.ResourceGroupName -like "*$VmRG*" }
foreach ($VmRG in $VmRGs) {
    $VMs = Get-AzureRmVM -ResourceGroupName $VmRG.ResourceGroupName
    ForEach ($vm in $vms) {
        $tags2 = $_.Tags
        $tags2 ['ShutdownSchedule_AllowStop'] = "$False"; 
    }
    Set-AzureRmResource -ResourceName $vm.Name -ResourceGroupName $vm.ResourceGroupName -ResourceType "Microsoft.Compute/virtualMachines" -Tag $tags2 -Force -Verbose
}

$tags2 = $_.Tags行没有意义。目前没有$_

我对 Azure 标记没有任何经验,但此处的文档包含代码应更密切地模拟的示例代码。在他们的样本中设置标签似乎总是使用 HashTable 结构,例如@{ShutdownSchedule_AllowStop=$false}

此部分似乎与您尝试完成的任务相关:

若要将标记添加到具有现有标记的资源组,请检索 现有标签,添加新标签,然后重新应用标签:

$tags = (Get-AzureRmResourceGroup -Name examplegroup).Tags 
$tags += @{Status="Approved"} 
Set-AzureRmResourceGroup -Tag $tags -Name examplegroup

到目前为止,我从未研究过工作流程。经过一些测试和一些研究,似乎"意外令牌"错误是由于工作流中存在的代码:

function Test-ArraySubscriptFn {
    $tags2 = @{}
    $tags2['asdf'] = $false
}

workflow Test-ArraySubscriptWf {
    $tags2 = @{}
    $tags2['asdf'] = $false    # error: Only variable names may be used as the target of an assignment statement
    $tags2.Add('asdf',$false)  # error: Method invocation is not supported in a Windows Powershell Workflow...
    $tags2 += @{'asdf'=$false} # no error
}

这与谷歌搜索结果一致。我想我们都需要对工作流程与"常规"Powershell脚本的不同之处进行一些研究。

相关内容

最新更新