适用于:✔️ 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”或选择“全是”以安装该模块。
创建维护配置
创建维护配置的第一步是创建一个资源组作为你的配置的容器。 此示例在 chinanorth 中创建一个名为 myMaintenanceRG 的资源组。 如果你已有一个可供使用的资源组,则可跳过此部分,并在其余示例中将资源组名称替换为你自己的名称。
New-AzResourceGroup `
   -Location chinanorth `
   -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 = "chinanorth"
$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 = "chinanorth"
$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 = "chinanorth"
$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 "chinanorth" `
   -ResourceName "myVM" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"
专用主机
若要将配置应用到专用主机,需要包含 -ResourceType hosts、带主机组名称的 -ResourceParentName,以及 -ResourceParentType hostGroups:
New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "chinanorth" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName myHostGroup `
   -ResourceParentType hostGroups `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"
虚拟机规模集
New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "chinanorth" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"
来宾
New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "chinanorth" `
   -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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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 "chinanorth" `
   -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 "chinanorth" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute"
检查更新状态
若要检查某项更新的状态,请使用 Get-AzApplyUpdate。 对 -ApplyUpdateName 参数使用 default 时,以下命令会显示最新更新的状态。 可以使用更新的名称(由 New-AzApplyUpdate 命令返回)来获取特定更新的状态。
此 cmdlet 仅适用于主机和 OS 映像范围。 它不适用于来宾范围。
Status         : Completed
ResourceId     : /subscriptions/b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso
LastUpdateTime : 1/1/2020 12:00:00 AM
Id             : /subscriptions/b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2/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 "chinanorth" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"
删除维护配置
若要删除维护配置,请使用 Remove-AzMaintenanceConfiguration:
Remove-AzMaintenanceConfiguration `
   -ResourceGroupName "myResourceGroup" `
   -Name "configName"
后续步骤
若要了解详细信息,请参阅 Azure 中虚拟机的维护。