我正在寻找方法来确定 Azure VM 是否已经闲置了一个多小时。如果超过一个小时没有鼠标移动,则符合空闲条件的标准。我想保存 VM 的状态并将其关闭。
这可以使用 Powershell 命令来实现吗?
我正在寻找方法来确定 Azure VM 是否已经闲置了一个多小时。如果超过一个小时没有鼠标移动,则符合空闲条件的标准。我想保存 VM 的状态并将其关闭。
这可以使用 Powershell 命令来实现吗?
我过去配置了类似的东西,不幸的是,这样做的唯一可靠方法是通过Windows上的任务计划(您没有在原始问题中指定操作系统)。现在,您应该在 PowerShell 中执行的以下代码将:
现在这只会关闭操作系统,但 Azure 中的 VM 资源只会达到“已停止”状态,因此仍会向您收取计算能力费用。为了让它进入“已停止(解除分配) ”状态并停止向您收费,我在 Azure 中有一个自动化帐户,该帐户有一个脚本,计划每小时执行一次并扫描所有状态为“已停止”的虚拟机,然后它执行命令Az-StopVM实际上解除了 VM 的分配并停止收费。
$TaskName = 'Idle_Shutdown'
$Service = New-Object -ComObject('Schedule.Service')
$Service.Connect()
$RootFolder = $Service.GetFolder('')
$TaskDefinition = $Service.NewTask(0)
$Settings = $TaskDefinition.Settings
$Settings.AllowDemandStart = $true
$Settings.Compatibility = 2
$Settings.Enabled = $true
$Settings.RunOnlyIfIdle = $true
$Settings.IdleSettings.IdleDuration = 'PT30M'
$Settings.IdleSettings.WaitTimeout = 'PT5M'
$Settings.IdleSettings.StopOnIdleEnd = $true
$Trigger = $TaskDefinition.Triggers.Create(2)
$Trigger.Repetition.Interval = 'PT1H'
$Trigger.Repetition.Duration = 'PT12H'
$Trigger.StartBoundary = ([datetime]::Now).ToString("yyyy-MM-dd'T'20:00:00")
$Trigger.Enabled = $true
$Action = $TaskDefinition.Actions.Create(0)
$Action.Path = 'shutdown'
$Action.Arguments = '/s /t 60'
$LocalUser = $TaskDefinition.Principal
$LocalUser.RunLevel = '1'
$user = [environment]::UserDomainName + '\' + [environment]::UserName
$null = $RootFolder.RegisterTaskDefinition($TaskName, $TaskDefinition, 6, $user, $null, 2)