使用 PowerShell 处理计划内维护

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

可以使用 Azure PowerShell 查看何时计划 VM 进行 维护。 使用-status参数时,Get-AzVM cmdlet 可获取计划维护信息。

仅当计划内存在维护时,才会返回维护信息。 如果未计划任何影响 VM 的维护,则 cmdlet 不会返回任何维护信息。

Get-AzVM -ResourceGroupName myResourceGroup -Name myVM -Status

输出

MaintenanceRedeployStatus               : 
  IsCustomerInitiatedMaintenanceAllowed : True
  PreMaintenanceWindowStartTime         : 5/14/2018 12:30:00 PM
  PreMaintenanceWindowEndTime           : 5/19/2018 12:30:00 PM
  MaintenanceWindowStartTime            : 5/21/2018 4:30:00 PM
  MaintenanceWindowEndTime              : 6/4/2018 4:30
  LastOperationResultCode               : None 

在 MaintenanceRedeployStatus 下返回以下属性:

价值 Description
客户启动维护是否被允许 指示此时是否可以在 VM 上启动维护
PreMaintenanceWindowStartTime(维护窗口开始时间之前) 可以在 VM 上启动维护的维护自助服务窗口起始时间
维护窗口结束时间前 当虚拟机的维护自助服务窗口结束时,您可以进行维护。
维护窗口开始时间 计划的维护开始,这是指 Azure 在虚拟机上启动维护的时间。
维护窗口结束时间 (MaintenanceWindowEndTime) Azure 发起对 VM 进行维护的计划时段结束时间
最后操作结果代码 上次尝试在 VM 上启动维护的结果

还可以使用 Get-AzVM 而不是指定 VM 来获取资源组中所有 VM 的维护状态。

Get-AzVM -ResourceGroupName myResourceGroup -Status

以下 PowerShell 示例采用订阅 ID 并返回一个虚拟机 (VM) 列表,显示这些虚拟机是否已计划进行维护。


function MaintenanceIterator {
  param (
    $SubscriptionId
  )
  
  Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null

  $rgList = Get-AzResourceGroup
  foreach ($rg in $rgList) {
    $vmList = Get-AzVM -ResourceGroupName $rg.ResourceGroupName 
    foreach ($vm in $vmList) {
      $vmDetails = Get-AzVM -ResourceGroupName $rg.ResourceGroupName -Name $vm.Name -Status
      [pscustomobject]@{
        Name                                  = $vmDetails.Name
        ResourceGroupName                     = $rg.ResourceGroupName
        IsCustomerInitiatedMaintenanceAllowed = [bool]$vmDetails.MaintenanceRedeployStatus.IsCustomerInitiatedMaintenanceAllowed
        LastOperationMessage                  = $vmDetails.MaintenanceRedeployStatus.LastOperationMessage
      }
    }
  }
}

使用 PowerShell 在 VM 上启动维护

如果 IsCustomerInitiatedMaintenanceAllowed 设置为 true,则使用上一部分中函数的信息,开始对 VM 进行维护。


MaintenanceIterator -SubscriptionId <Subscription ID> |
    Where-Object -FilterScript {$_.IsCustomerMaintenanceAllowed} |
        Restart-AzVM -PerformMaintenance

经典部署

重要

通过经典部署模型创建的 VM 将于 2023 年 9 月 1 日停用。

如果从 Azure 服务管理中使用 IaaS 资源,请在 2023 年 9 月 1 日前完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。

如果仍有使用经典部署模型部署的旧 VM,可以使用 PowerShell 查询 VM 并启动维护。

若要获取 VM 的维护状态,请键入:

Get-AzureVM -ServiceName <Service name> -Name <VM name>

若要在经典 VM 上启动维护,请键入:

Restart-AzureVM -InitiateMaintenance -ServiceName <service name> -Name <VM name>

后续步骤

还可以使用 Azure CLI门户处理计划内维护。