我有下面的工作流程,每当我尝试将其放入工作流程时,我就会发现错误。
如果我将其从工作流程中删除,我会想知道是否存在一些错误的语法,即使在工作流程中不允许这样做。
道歉,但我对工作流程的了解有限(正如您可能知道的那样)。我最终试图让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"; }
错误"表达式或语句中的意外令牌"。
我有什么想法可以纠正这个问题吗?
提前致谢。
答案 0 :(得分:0)
$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标记的任何经验,但the documentation here包含您的代码应该更接近模拟的示例代码。在样本中设置标记似乎总是使用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
}
这与Google搜索results一致。我想我们都需要对工作流differ from 'regular' powershell scripts。
进行一些研究