Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找Azure VM是否已空闲_Azure_Powershell_Azure Vm Role - Fatal编程技术网

查找Azure VM是否已空闲

查找Azure VM是否已空闲,azure,powershell,azure-vm-role,Azure,Powershell,Azure Vm Role,我正在寻找一种方法来发现Azure VM是否已经闲置了一个多小时。 如果超过一小时没有鼠标移动,则符合空闲的条件。 我想保存VM的状态并将其关闭 使用Powershell comands可以实现这一点吗?我在过去配置过类似的东西,不幸的是,唯一可靠的方法是通过在Windows上计划的任务(您在最初的问题中没有指定操作系统)。现在,您应该在PowerShell中执行的以下代码将: 如果在过去30分钟内没有任何活动,它将在另外60秒的时间内触发关机命令,以便用户有时间执行任何操作,以取消该操作并等待

我正在寻找一种方法来发现Azure VM是否已经闲置了一个多小时。 如果超过一小时没有鼠标移动,则符合空闲的条件。 我想保存VM的状态并将其关闭


使用Powershell comands可以实现这一点吗?

我在过去配置过类似的东西,不幸的是,唯一可靠的方法是通过在Windows上计划的任务(您在最初的问题中没有指定操作系统)。现在,您应该在PowerShell中执行的以下代码将:

  • 如果在过去30分钟内没有任何活动,它将在另外60秒的时间内触发关机命令,以便用户有时间执行任何操作,以取消该操作并等待下一个触发周期。注意开关RunonlyFidle
  • 在接下来的12小时内,每1小时从晚上8点开始检查机器上是否有任何活动(包括单击、鼠标移动等),它排除了系统进程,因为它正是为此而构建的
  • 运行级别设置为1,因此操作系统具有执行任务的权限,而不考虑用户是否仍在登录
  • 正如您可以看到的,最后两行实际上创建了计划任务,并且它被配置为在执行脚本的当前登录用户的上下文中创建它,但是如果需要,可以进行调整
  • 现在这只会关闭操作系统,但是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)
    

    你试过什么?什么不起作用?