使用维护配置和 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”或选择“全是”以安装该模块。
创建维护配置
创建维护配置的第一步是创建一个资源组作为你的配置的容器。 此示例在 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/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
是更新完成的时间,不管是你发起的更新,还是平台因为你没有使用自行维护时段而发起的更新。 如果从未通过维护配置应用更新,则 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 中虚拟机的维护。