代码之家  ›  专栏  ›  技术社区  ›  smd

DevTest实验室虚拟机自动启动

  •  0
  • smd  · 技术社区  · 7 年前

    有没有办法在DevTest实验室虚拟机上启用自动启动功能作为创建的一部分,即可以将其添加到虚拟机的ARM模板中?

    我目前通过Azure门户手动启用此功能,但我发现当团队服务进行后续部署时,它会被禁用。

    解决方案

    受下面Ashok的公认答案启发,我设法将PowerShell脚本调整并简化为以下内容。。。

    Param([string] $resourceId)
    
    $tags = (Get-AzureRmResource -ResourceId $resourceId).Tags
    
    if (-Not ($tags) -Or -Not($tags.ContainsKey('AutoStartOn'))) {
      $tags += @{ AutoStartOn=$true; }
    }
    
    if (-Not ($tags) -Or -Not($tags.ContainsKey('AlwaysOn'))) {
      $tags += @{ AlwaysOn=$true; }
    }
    
    Set-AzureRmResource -ResourceId $resourceId -Tag $tags -Force
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   AshokPeddakotla    7 年前

    自动启动策略要求您显式选择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
    }