我有下面的工作流程,每当我尝试将其放入工作流程时,我都会发现错误。
如果我将其从工作流程中取出,它就可以工作,我想知道我是否缺少一些不正确的语法,或者即使工作流程中不允许这样做。
抱歉,我对工作流程的了解有限(正如您可能知道的那样(。我最终试图让 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脚本的不同之处进行一些研究。