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