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

如何以编程方式管理 Azure VM 的更新

本文指导你完成使用 Azure REST API 在 Azure 虚拟机上使用 Azure 更新管理器触发评估和更新部署的过程。 如果不熟悉更新管理器并想要了解详细信息,请参阅 Azure 更新管理器概述。 要使用 Azure REST API 管理已启用 Arc 的服务器,请参阅如何以编程方式使用已启用 Arc 的服务器

使用 Azure 中的 Azure 更新管理器, 可以使用 Azure REST API 以编程方式访问。 此外,还可在 Azure PowerShellAzure CLI 中使用适当的 REST 命令。

可通过 Update Manager 虚拟机扩展支持 Azure REST API 来管理 Azure VM。

更新评估

要在 Azure VM 上触发更新评估,请指定以下 POST 请求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/assessPatches?api-version=2020-12-01`

若要指定 POST 请求,可以使用 Azure CLI az vm assess-patchs 命令。

az vm assess-patches -g MyResourceGroup -n MyVm

更新部署

要在 Azure VM 上触发更新部署,请指定以下 POST 请求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/installPatches?api-version=2020-12-01`

请求正文

下表描述了请求正文的元素:

properties 说明
maximumDuration 操作的最长运行时间。 它必须是符合 ISO 8601 标准的持续时间字符串,例如 PT4H(4 小时)。
rebootSetting 如果计算机应重新启动,并且来宾 OS 更新安装需要它才能完成,则为状态标记。 可接受的值:IfRequired, NeverReboot, AlwaysReboot
windowsParameters 运行受支持的 Microsoft Windows Server 操作系统的 Azure VM 上的来宾 OS 更新的参数选项。
windowsParameters - classificationsToInclude 用于选择要安装在计算机上的更新的类别/分类列表。 可接受的值:Critical, Security, UpdateRollUp, FeaturePack, ServicePack, Definition, Tools, Updates
windowsParameters - kbNumbersToInclude 应安装的 Windows 更新 KB ID 的列表。 将安装属于 classificationsToInclude 列表中提供的分类的所有更新。 kbNumbersToInclude 是除分类之外要安装的特定 KB 的可选列表。 例如:1234
windowsParameters - kbNumbersToExclude 不应安装的 Windows 更新 KB ID 的列表。 此参数替代windowsParameters - classificationsToInclude,这意味着即使它属于参数下classificationsToInclude提供的分类,此处指定的Windows 更新 知识库(KB) ID 也不会安装。
linuxParameters 运行受支持的 Linux 服务器操作系统的 Azure VM 上的来宾 OS 更新的参数选项。
linuxParameters - classificationsToInclude 用于选择要安装在计算机上的更新的类别/分类列表。 可接受的值:Critical, Security, Other
linuxParameters - packageNameMasksToInclude 应安装的 Linux 包列表。 将安装属于 classificationsToInclude 列表中提供的分类的所有更新。 packageNameMasksToInclude 是除分类之外要安装的包名称的可选列表。 例如:mysql, libc=1.0.1.1, kernel*
linuxParameters - packageNameMasksToExclude 不应安装的更新列表。 此参数替代 linuxParameters - packageNameMasksToExclude,这意味着即使包属于参数下 classificationsToInclude 提供的分类,也不会安装此处指定的包。

若要指定 POST 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

POST on 'subscriptions/{subscriptionId}/resourceGroups/acmedemo/providers/Microsoft.Compute/virtualMachines/ameacr/installPatches?api-version=2020-12-01

{
    "maximumDuration": "PT120M",
    "rebootSetting": "IfRequired",
    "windowsParameters": {
      "classificationsToInclude": [
        "Security",
        "UpdateRollup",
        "FeaturePack",
        "ServicePack"
      ],
      "kbNumbersToInclude": [
        "11111111111",
        "22222222222222"
      ],
      "kbNumbersToExclude": [
        "333333333333",
        "55555555555"
      ]
    }
  }'

创建维护配置计划

若要创建维护配置计划,请指定以下 PUT 请求:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenanceConfigurationsName>?api-version=2021-09-01-preview`

请求正文

下表描述了请求正文的元素:

properties 说明
id 资源的完全限定标识符
location 获取或设置资源的位置
name 资源名称
properties.extensionProperties 获取或设置 maintenanceConfiguration 的 extensionProperties
properties.maintenanceScope 获取或设置配置的 maintenanceScope
properties.maintenanceWindow.duration HH:MM 格式的维护时段的持续时间。 如果未提供,则根据提供的维护范围使用默认值。 示例:05:00。
properties.maintenanceWindow.expirationDateTime YYYY-MM-DD hh:mm 格式的维护时段的有效到期日期。 根据该时区在提供给夏令时的时区中创建该窗口。 到期日期必须设置为未来日期。 如果未提供,则设置为最大日期时间 9999-12-31 23:59:59。
properties.maintenanceWindow.recurEvery 维护时段预计重现的频率。 该频率可以表示为每日、每周或每月计划。 每日计划的格式为递归:[频率为整数]['Day(s)']。 如果未提供任何频率,则默认频率为 1。 每日计划示例为 recurEvery: Day, recurEvery: 3Days。 每周计划的格式为递归:[频率为整数]['Week(s)'] [可选逗号分隔的工作日星期一-星期日列表]。 每周计划示例为 recurEvery:3Weeks、recurEvery:Week Saturday、Sunday。 每月计划的格式为 [整数形式的频率]['月数'] [逗号分隔的月份日期列表] 或 [整数形式的频率]['月数'] [一个月中的哪一周 (First, Second, Third, Fourth, Last)] [周一至周六星期名称]。 每月计划示例为 recurEvery:Month、recurEvery:2Months、recurEvery:Month day23、day24、recurEvery:Month Last Sunday、recurEvery:Month Fourth Monday。
properties.maintenanceWindow.startDateTime YYYY-MM-DD hh:mm 格式的维护时段的生效开始日期。 可以将开始日期设置为当前日期或将来日期。 该时段将以提供的时区创建,并根据该时区调整为夏令时。
properties.maintenanceWindow.timeZone 时区的名称。 可以通过在 PowerShell 中执行 [System.TimeZoneInfo]:GetSystemTimeZones()来获取时区列表。 示例:太平洋标准时间、UTC、西欧标准时间、韩国标准时间、 澳大利亚中部标准时间。
properties.namespace 获取或设置资源的命名空间
properties.visibility 获取或设置配置的可见性。 默认值为“Custom”
systemData 包含 createdBy 和 modifiedBy 信息的 Azure 资源管理器元数据。
tags 获取或设置资源的标记
type 资源的类型

若要指定 POST 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourceGroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestAdv2?api-version=2021-09-01-preview

{
  "location": "eastus2euap",
  "properties": {
    "namespace": null,
    "extensionProperties": {
      "InGuestPatchMode" : "User"
    },
    "maintenanceScope": "InGuestPatch",
    "maintenanceWindow": {
      "startDateTime": "2021-08-21 01:18",
      "expirationDateTime": "2221-05-19 03:30",
      "duration": "01:30",
      "timeZone": "India Standard Time",
      "recurEvery": "Day"
    },
    "visibility": "Custom",
    "installPatches": {
      "rebootSetting": "IfRequired",
      "windowsParameters": {
        "classificationsToInclude": [
          "Security",
          "Critical",
          "UpdateRollup"
        ]
      },
      "linuxParameters": {
        "classificationsToInclude": [
          "Other"
        ]
      }
    }
  }
}'

将 VM 与计划相关联

若要将 VM 与维护配置计划相关联,请指定以下 PUT 请求:

PUT on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

若要指定 PUT 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourceGroups/atscalepatching/providers/Microsoft.Compute/virtualMachines/win-atscalepatching-1/providers/Microsoft.Maintenance/configurationAssignments/TestAzureInGuestAdv?api-version=2021-09-01-preview

{
  "properties": {
    "maintenanceConfigurationId": "/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourcegroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestIntermediate2"
  },
  "location": "eastus2euap"
}'

从计划中删除计算机

若要从计划中删除计算机,请获取创建的计算机的所有配置分配名称,以便将计算机与 Azure Resource Graph 中的当前计划相关联,如下所示:

maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| where properties.maintenanceConfigurationId =~ "<maintenance configuration Resource ID>"
| where properties.resourceId =~ "<Machine Resource Id>"
| project name, id

从上面获取名称后,按照 DELETE 请求删除配置分配 -

DELETE on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

后续步骤