Azure Runbook启动/停止虚拟机

时间:2020-09-23 20:45:29

标签: azure powershell automation azure-automation azure-runbook

因此,我有一堆虚拟机分布在不同的资源组中,我希望根据特定时间关闭/启动它们。我想使此管理尽可能容易,并且正在尝试找到一种使用Tag和Runbook来实现此目的的方法。问题是,我希望他们能够根据他们的资源组在不同的时间启动/停止。到目前为止,我已经为所有具有相同的tag Nametag value是资源组名称的VM制作了标签。如何使我要做的事情尽可能简单?调用其他Runbook的Runbook是一个好的解决方案吗?

2 个答案:

答案 0 :(得分:0)


  • 或者您可以自己编写自动化脚本。考虑一下逻辑。以下是您可以参考的一些摘要。有关如何使用PowerShell命令行的详细信息,最好参考Microsoft文档。

1。通过$allvms = Get-AzureVM获取订阅中的所有VM;

2。启动特定资源组中的虚拟机

foreach($thisvm in $allvms)
{
Start-AzureRmVM -ResourceGroupName "AzureRG2" -Name "$thisvm"
}

3。通过以下方式停止特定资源组中的虚拟机

foreach($thisvm in $allvms)
{
Stop-AzureRmVM -ResourceGroupName "AzureRG1" -Name "$thisvm"
}

4.link您要启动或关闭VM的不同计划。

5。不要忘记在Azure自动化中安装模块。

答案 1 :(得分:0)

设置标签后。

如果您有多个VM,最好的选择是使用PowerShell Workflow,脚本将在-parallel中运行,这对于计划的作业将高效

这是我用于此目的的 我的脚本 。另外,您需要在Automation Account中为具有适当权限的用户设置凭据。

workflow Stop-VM
{
    $myCred = Get-AutomationPSCredential -Name "yourVmUser"
    $userName = $myCred.UserName
    $securePassword = $myCred.Password
    $myPsCred = New-Object System.Management.Automation.PSCredential ($userName,$securePassword)

    Connect-AzAccount -Credential $myPsCred
        
    $vms = Get-AzVM | Where-Object {$_.Tags.Keys -eq "yourTagName" -or $_.Tags.Keys -eq "yourTagValue"} | Select-Object Name, ResourceGroupName, Tags
        
    foreach -parallel ($vm in $vms)
    { 
        $status = (Get-AzVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Status).Statuses[1].DisplayStatus
        if ($status -ne "VM deallocated")
        {
            Write-Output "Stopping $($vm.Name)";         
            Stop-AzVm -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force;
        } 
    } 
}

要启动VM,您要使用Start-AzVm并更改条件$status