使用 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
IsCustomerInitiatedMaintenanceAllowed 指出您目前是否可以在 VM 上開始維修
PreMaintenanceWindowStartTime 維修自助期間的開始,此時您可以在 VM 上起始維修
PreMaintenanceWindowEndTime 維修自助期間的結束,此時您可以在 VM 上起始維修
MaintenanceWindowStartTime 排定維護開始,此時 Azure 會在您的虛擬機器上起始維護
MaintenanceWindowEndTime 排定維護期間結束,此時 Azure 會在您的虛擬機器上停止維護
LastOperationResultCode 前次嘗試在 VM 上起始維修的結果

您也可以使用 Get-AzVM 而不指定 VM 來取得資源群組中所有 VM 的維修狀態。

Get-AzVM -ResourceGroupName myResourceGroup -Status

下列 PowerShell 範例會採用您的訂用帳戶識別碼,並傳回 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 Resource Manager 的許多功能增強功能。

如需詳細資訊,請參閱請於 2023 年 9 月 1 日之前將您的 IaaS 資源移轉至 Azure Resource Manager

如果您仍有使用傳統部署模型部署的舊版 VM,可以使用 PowerShell 查詢 VM 並起始維護。

若要取得 VM 的維護狀態,請鍵入:

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

若要在傳統 VM 上啟動維護,請鍵入:

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

下一步

您也可以使用 Azure CLI入口網站來處理計劃性維護。