你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用维护配置和 Azure PowerShell 来控制更新

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

可以使用维护配置功能来控制何时将平台更新应用到各种 Azure 资源。 本文介绍专用主机和独立虚拟机 (VM) 的 Azure PowerShell 选项。 若要详细了解使用维护配置功能的好处、该功能的限制以及其他管理选项,请参阅使用维护配置管理平台更新

如果你在查找有关如何使用规模集维护配置的信息,请参阅 Azure 虚拟机规模集的维护控制

重要

特定的范围支持特定的机器类型和计划。 请务必为 VM 选择正确的范围。

启用 Azure PowerShell 模块

确保 PowerShellGet 是最新的:

Install-Module -Name PowerShellGet -Repository PSGallery -Force

安装 Azure PowerShell 模块 Az.Maintenance

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 值为 "Day""3Days"
  • 每周RecurEvery 值为 "3Weeks""Week Saturday,Sunday"
  • 每月RecurEvery 值为 "Month day23,day24""Month Last Sunday""Month Fourth Monday"

主机

此示例创建一个名为 myConfig 的维护配置,其范围为 Host,计划时段为每月第四个星期一的 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" 可确保维护配置用于控制主机上的更新。 请务必确保为目标计算机的特定范围创建配置。 详细了解范围

OS 映像

此示例创建名为 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

使用此配置的 ID 将配置分配到 VM。 指定 -ResourceType VirtualMachines。 为 -ResourceName 提供 VM 的名称,并为 -ResourceGroupName 提供 VM 的资源组。

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。 使用 -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 对象。 可以使用 Get-AzApplyUpdate 命令中的 Name 属性来检查更新状态,如本文后面部分所述。

专用主机

将更新应用到专用主机:

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。 对 -ApplyUpdateName 参数使用 default 时,以下命令会显示最新更新的状态。 可以使用更新的名称(由 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 中虚拟机的维护