使用維護組態和 Azure PowerShell 控制更新

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

您可以使用維護設定功能來控制何時將平臺更新套用至各種 Azure 資源。 本文涵蓋專用主機和隔離虛擬機 (VM) 的 Azure PowerShell 選項。 如需使用維護設定功能、其限制和其他管理選項之優點的詳細資訊,請參閱 使用維護設定管理平臺更新。

如果您要尋找使用擴展集維護設定的相關信息,請參閱 Azure 虛擬機器擴展集 的維護控制。

重要

特定 範圍 支援特定電腦類型和排程。 請務必為您的 VM 選取正確的範圍。

啟用 Azure PowerShell 模組

請確定 PowerShellGet 為最新狀態:

Install-Module -Name PowerShellGet -Repository PSGallery -Force

Az.Maintenance安裝 Azure PowerShell 模組:

Install-Module -Name Az.Maintenance

確認您執行的是最新版本 Az.Maintenance (1.2.0 版):

Get-Module -ListAvailable -Name Az.Maintenance

請確定您正在執行適當的 版本 Az.Maintenance

Import-Module -Name Az.Maintenance -RequiredVersion 1.2.0

如果您要在本機安裝,請務必以系統管理員身分開啟您的 Azure PowerShell 提示字元。

系統可能會要求您確認您想要從不受信任的存放庫進行安裝。 輸入 Y 或選取 [ 全部 是] 以安裝模組。

建立維護設定

建立維護設定的第一個步驟是建立資源群組作為組態的容器。 此範例會在eastus建立名為 myMaintenanceRG 的資源群組。 若已有要使用的資源群組,則可跳過此部分,且在其餘範例中以您自己的資源群組名稱來取代。

New-AzResourceGroup `
   -Location eastus `
   -Name myMaintenanceRG

您可以宣告 Azure 將在您的資源上定期套用更新的排程時間。 建立排程的窗口之後,您不再需要手動套用更新。

您可以將維護週期表示為每日、每周或每月。 以下列出一些範例:

  • 每日RecurEvery"3Days"的值"Day"
  • 每周RecurEvery"Week Saturday,Sunday"的值"3Weeks"
  • 每月:RecurEvery"Month day23,day24""Month Last Sunday" 的值"Month Fourth Monday"

Host

此範例會建立名為 myConfigHost維護組態,其排程的時段為每月第四個星期一 5 小時。 duration此範圍的排程值應至少為兩小時。 若要開始,請定義 的參數 New-AzMaintenanceConfiguration

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "Host"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "05:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Month Fourth Monday"

定義參數之後,您可以使用 New-AzMaintenanceConfiguration Cmdlet 來建立組態:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

使用 $scope = "Host" 可確保維護設定會用於控制主機上的更新。 請務必為目標計算機的特定範圍建立組態。 深入瞭解範圍

作業系統映像

此範例會建立名為 myConfig 的維護組態, osimage其排程時間範圍為每 5 天 8 小時。 duration此範圍的排程值應該至少為5小時。 此範圍允許排程週期最多7天。

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "osimage"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "08:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "5days"

定義參數之後,您可以使用 New-AzMaintenanceConfiguration Cmdlet 來建立組態:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

來賓

維護組態功能的最新新增是 InGuestPatch 範圍。 此範例示範如何使用 Azure PowerShell 建立客體範圍的維護設定。 如需此範圍的詳細資訊,請參閱 來賓

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "InGuestPatch"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "04:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Week Saturday, Sunday"
$WindowsParameterClassificationToInclude = "FeaturePack","ServicePack";
$WindowParameterKbNumberToInclude = "KB123456","KB123466";
$WindowParameterKbNumberToExclude = "KB123456","KB123466";
$RebootOption = "IfRequired";
$LinuxParameterClassificationToInclude = "Other";
$LinuxParameterPackageNameMaskToInclude = "apt","httpd";
$LinuxParameterPackageNameMaskToExclude = "ppt","userpk";

定義參數之後,您可以使用 New-AzMaintenanceConfiguration Cmdlet 來建立組態:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery `
   -WindowParameterClassificationToInclude $WindowsParameterClassificationToInclude `
   -WindowParameterKbNumberToInclude $WindowParameterKbNumberToInclude `
   -WindowParameterKbNumberToExclude $WindowParameterKbNumberToExclude `
   -InstallPatchRebootSetting $RebootOption `
   -LinuxParameterPackageNameMaskToInclude $LinuxParameterPackageNameMaskToInclude `
   -LinuxParameterClassificationToInclude $LinuxParameterClassificationToInclude `
   -LinuxParameterPackageNameMaskToExclude $LinuxParameterPackageNameMaskToExclude `
   -ExtensionProperty @{"InGuestPatchMode"="User"}

如果您嘗試建立具有相同名稱但位於不同位置的組態,您將會收到錯誤。 針對資源群組,設定名稱必須是唯一的。

您可以使用 Get-AzMaintenanceConfiguration 來檢查是否已成功建立維護 組態

Get-AzMaintenanceConfiguration | Format-Table -Property Name,Id

指派設定

建立設定之後,您可能也想要使用 Azure PowerShell 將機器指派給它。 您可以使用 New-AzConfigurationAssignment Cmdlet。

隔離式 VM

使用組態的標識碼,將組態指派給 VM。 指定 -ResourceType VirtualMachines。 提供的 VM -ResourceName名稱,並為 提供 VM -ResourceGroupName的資源群組。

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVM" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

專用主機

若要將組態套用至專用主機,您必須包含 -ResourceType hosts具有 -ResourceParentName 主機群組名稱的 和 -ResourceParentType hostGroups

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName myHostGroup `
   -ResourceParentType hostGroups `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

虛擬機器擴展集

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

來賓

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myGuest" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

檢查是否有擱置的更新

檢查擱置中的更新,請使用 Get-AzMaintenanceUpdate。 如果 VM 與您登入的訂用帳戶不同,請使用 -subscription 來指定 VM 的 Azure 訂用帳戶。

如果沒有要顯示的更新,此命令不會傳回任何內容。 否則,它會傳 PSApplyUpdate 回 物件:

{
   "maintenanceScope": "Host",
   "impactType": "Freeze",
   "status": "Pending",
   "impactDurationInSec": 9,
   "notBefore": "2020-02-21T16:47:44.8728029Z",
   "properties": {
      "resourceId": "/subscriptions/39c6cced-4d6c-4dd5-af86-57499cd3f846/resourcegroups/Ignite2019/providers/Microsoft.Compute/virtualMachines/MCDemo3"
} 

隔離式 VM

檢查隔離式 VM 是否有擱置中更新。 在此範例中,輸出會格式化為資料表以取得可讀性:

Get-AzMaintenanceUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" | Format-Table

專用主機

檢查專用主機是否有擱置中更新。 在此範例中,輸出會格式化為資料表以取得可讀性:

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" | Format-Table

虛擬機器擴展集

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" | Format-Table

套用更新

使用 New-AzApplyUpdate 來套用擱置的更新。 套用更新呼叫最多可能需要 2 小時才能完成。

此 Cmdlet 僅適用於主機和 OS 映射範圍。 不適用於來賓範圍。

隔離式 VM

建立將更新套用至隔離 VM 的要求:

New-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute"

成功時,此命令會傳 PSApplyUpdate 回物件。 您可以使用 Name 命令中的 Get-AzApplyUpdate 屬性來檢查更新狀態,如本文稍後所述

專用主機

將更新套用至專用主機:

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName Microsoft.Compute

虛擬機器擴展集

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute"

檢查更新狀態

若要檢查更新的狀態,請使用 Get-AzApplyUpdate。 下列命令會針對 參數顯示default-ApplyUpdateName最新更新的狀態。 您可取代更新名稱 (由 New-AzApplyUpdate 命令傳回),以取得特定更新的狀態。

此 Cmdlet 僅適用於主機和 OS 映射範圍。 不適用於來賓範圍。

Status         : Completed
ResourceId     : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso
LastUpdateTime : 1/1/2020 12:00:00 AM
Id             : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso/providers/Microsoft.Maintenance/applyUpdates/default
Name           : default
Type           : Microsoft.Maintenance/applyUpdates

LastUpdateTime 是您起始更新或平臺起始更新的時間,因為您沒有使用自我維護視窗。 如果從未透過維護組態套用更新, LastUpdateTime 則會顯示預設值。

隔離式 VM

檢查特定虛擬機器的更新:

Get-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" `
  -ApplyUpdateName "applyUpdateName"

專用主機

檢查專用主機的更新:

Get-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

虛擬機器擴展集

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

刪除維護設定

若要刪除維護設定,請使用 Remove-AzMaintenanceConfiguration

Remove-AzMaintenanceConfiguration `
   -ResourceGroupName "myResourceGroup" `
   -Name "configName"

下一步

若要深入瞭解,請參閱 Azure 中虛擬機的維護。