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

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

创建维护配置,你可以决定何时将平台更新应用于各种 Azure 资源。 本主题介绍了面向专用主机和独立 VM 的 Azure PowerShell 选项。 有关使用维护配置的好处、其限制和其他管理选项的详细信息,请参阅使用维护配置管理平台更新

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

重要

每个范围都仅支持特定的虚拟机类型和计划日程,因此请确保选择适合你的虚拟机的范围。

启用 PowerShell 模块

确保 PowerShellGet 为最新版本。

Install-Module -Name PowerShellGet -Repository PSGallery -Force

安装 Az.Maintenance PowerShell 模块。

Install-Module -Name Az.Maintenance

检查运行的是否是最新版本的 Az.Maintenance PowerShell 模块(版本 1.2.0)

Get-Module -ListAvailable -Name Az.Maintenance

确保使用的是正确版本的 Az.Maintenance

Import-Module -Name Az.Maintenance -RequiredVersion 1.2.0

如果在本地安装,请确保以管理员身份打开 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 的维护配置,范围为主机,计划窗口为每月第四个星期一的 5 小时。 请务必注意,此范围的计划持续时间应至少为两小时。 首先,需要定义 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 的维护配置,其范围限定为 OS 映像,其计划时段为每 5 天 8 小时。 请务必注意,此范围的计划持续时间应至少为 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 范围。 此示例演示如何使用 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

分配此配置

创建配置后,你可能还希望使用 PowerShell 为其分配计算机。 为此,我们将使用 New-AzConfigurationAssignment

隔离的 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/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 "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/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 是完成更新的时间,此更新是你发起的,或由平台在你未使用自行维护时段时发起的。 如果从未通过维护配置来应用更新,则会显示默认值。

隔离的 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"

后续步骤

若要了解详细信息,请参阅维护和更新