自动启动策略要求您显式选择VM,并在启用该策略后从其上下文菜单中应用该策略。这样,您就不会轻易遇到意外自动启动不需要的虚拟机并导致意外开支的情况。
有关更多详细信息,请参阅以下文章:
https://azure.microsoft.com/en-us/updates/azure-devtest-labs-schedule-vm-auto-start/
您可以尝试以下PS功能。注意,标签集合必须整体替换。这就是为什么您看到的逻辑确保只附加到集合,或者更改现有值(如果已经存在)。否则,您将删除其他标记。
function Enable-AzureDtlVmAutoStart
{
[CmdletBinding()]
param(
[string] $ResourceId,
[switch] $AlwaysOn
)
$autoStartOnTagName = 'AutoStartOn'
$alwaysOnTagName = 'AlwaysOn'
$labVm = Get-AzureRmResource -ResourceId $ResourceId
$tags = $labVm.Tags
# Undefined tags collection can happen if the Lab VM never had any tags set.
if (-not $tags)
{
$tags = @(@{},@{})
}
# Update the tags if they already exist in the collection.
$tags | % {
if ($_.Name -eq $autoStartOnTagName)
{
$_.Value = $true
}
if ($_.Name -eq $alwaysOnTagName)
{
$_.Value = $true
}
}
# Otherwise, create new tags.
if (-not ($tags | ? { $_.Name -eq $autoStartOnTagName }))
{
$tags += @{Name=$autoStartOnTagName;Value=$true}
}
if (-not ($tags | ? { $_.Name -eq $alwaysOn }))
{
$tags += @{Name=$alwaysOnTagName;Value=$AlwaysOn}
}
Set-AzureRmResource -ResourceId $ResourceId -Tag $tags -Force
}