Handling planned maintenance using PowerShell
Applies to: ✔️ Linux VMs ✔️ Windows VMs ✔️ Flexible scale sets ✔️ Uniform scale sets
You can use Azure PowerShell to see when VMs are scheduled for maintenance. Planned maintenance information is available from the Get-AzVM cmdlet when you use the -status
parameter.
Maintenance information is returned only if there is maintenance planned. If no maintenance is scheduled that impacts the VM, the cmdlet does not return any maintenance information.
Get-AzVM -ResourceGroupName myResourceGroup -Name myVM -Status
Output
MaintenanceRedeployStatus :
IsCustomerInitiatedMaintenanceAllowed : True
PreMaintenanceWindowStartTime : 5/14/2018 12:30:00 PM
PreMaintenanceWindowEndTime : 5/19/2018 12:30:00 PM
MaintenanceWindowStartTime : 5/21/2018 4:30:00 PM
MaintenanceWindowEndTime : 6/4/2018 4:30
LastOperationResultCode : None
The following properties are returned under MaintenanceRedeployStatus:
Value | Description |
---|---|
IsCustomerInitiatedMaintenanceAllowed | Indicates whether you can start maintenance on the VM at this time |
PreMaintenanceWindowStartTime | The beginning of the maintenance self-service window when you can initiate maintenance on your VM |
PreMaintenanceWindowEndTime | The end of the maintenance self-service window when you can initiate maintenance on your VM |
MaintenanceWindowStartTime | The beginning of the maintenance scheduled in which Azure initiates maintenance on your VM |
MaintenanceWindowEndTime | The end of the maintenance scheduled window in which Azure initiates maintenance on your VM |
LastOperationResultCode | The result of the last attempt to initiate maintenance on the VM |
You can also get the maintenance status for all VMs in a resource group by using Get-AzVM and not specifying a VM.
Get-AzVM -ResourceGroupName myResourceGroup -Status
The following PowerShell example takes your subscription ID and returns a list of VMs indicating whether they are scheduled for maintenance.
function MaintenanceIterator {
param (
$SubscriptionId
)
Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null
$rgList = Get-AzResourceGroup
foreach ($rg in $rgList) {
$vmList = Get-AzVM -ResourceGroupName $rg.ResourceGroupName
foreach ($vm in $vmList) {
$vmDetails = Get-AzVM -ResourceGroupName $rg.ResourceGroupName -Name $vm.Name -Status
[pscustomobject]@{
Name = $vmDetails.Name
ResourceGroupName = $rg.ResourceGroupName
IsCustomerInitiatedMaintenanceAllowed = [bool]$vmDetails.MaintenanceRedeployStatus.IsCustomerInitiatedMaintenanceAllowed
LastOperationMessage = $vmDetails.MaintenanceRedeployStatus.LastOperationMessage
}
}
}
}
Start maintenance on your VM using PowerShell
Using information from the function in the previous section, the following starts maintenance on a VM if IsCustomerInitiatedMaintenanceAllowed is set to true.
MaintenanceIterator -SubscriptionId <Subscription ID> |
Where-Object -FilterScript {$_.IsCustomerMaintenanceAllowed} |
Restart-AzVM -PerformMaintenance
Classic deployments
Important
VMs created through the classic deployment model will be retired on September 1, 2023.
If you use IaaS resources from Azure Service Management, please complete your migration by September 1, 2023. We encourage you to make the switch sooner to take advantage of the many feature enhancements in Azure Resource Manager.
For more information, see Migrate your IaaS resources to Azure Resource Manager by September 1, 2023.
If you still have legacy VMs that were deployed using the classic deployment model, you can use PowerShell to query for VMs and initiate maintenance.
To get the maintenance status of a VM, type:
Get-AzureVM -ServiceName <Service name> -Name <VM name>
To start maintenance on your classic VM, type:
Restart-AzureVM -InitiateMaintenance -ServiceName <service name> -Name <VM name>
Next steps
You can also handle planned maintenance using the Azure CLI or portal.