AzLocal.UpdateManagement

0.8.89

PowerShell module to manage Azure Local (formerly Azure Stack HCI) cluster updates using Azure Update Manager APIs. Provides functions to start updates, check update status, list available updates, and monitor update runs.

Minimum PowerShell version

5.1

Installation Options

Copy and Paste the following command to install this package using PowerShellGet More Info

Install-Module -Name AzLocal.UpdateManagement -RequiredVersion 0.8.89

Copy and Paste the following command to install this package using Microsoft.PowerShell.PSResourceGet More Info

Install-PSResource -Name AzLocal.UpdateManagement -Version 0.8.89

You can deploy this package directly to Azure Automation. Note that deploying packages with dependencies will deploy all the dependencies to Azure Automation. Learn More

Manually download the .nupkg file to your system's default download location. Note that the file won't be unpacked, and won't include any dependencies. Learn More

Owners

Copyright

(c) Microsoft. All rights reserved.

Package Details

Author(s)

  • Neil Bird Microsoft

Tags

Azure AzureLocal AzureStackHCI Updates UpdateManager HCI Automation CICD Pipeline ServiceNow ITSM Incident

Functions

Connect-AzLocalServicePrincipal Start-AzLocalClusterUpdate Get-AzLocalClusterUpdateReadiness Get-AzLocalClusterInventory Get-AzLocalClusterInfo Get-AzLocalUpdateSummary Get-AzLocalAvailableUpdates Get-AzLocalUpdateRuns Set-AzLocalClusterUpdateRingTag Invoke-AzLocalFleetOperation Get-AzLocalFleetProgress Test-AzLocalFleetHealthGate Export-AzLocalFleetState Resume-AzLocalFleetUpdate Stop-AzLocalFleetUpdate Test-AzLocalClusterHealth Get-AzLocalFleetStatusData New-AzLocalFleetStatusHtmlReport Test-AzLocalUpdateScheduleAllowed Reset-AzLocalSideloadedTag Get-AzLocalItsmConfig Test-AzLocalItsmConnection New-AzLocalIncident Copy-AzLocalPipelineExample Update-AzLocalPipelineExample Copy-AzLocalItsmSample Get-AzLocalFleetHealthFailures Test-AzLocalApplyUpdatesScheduleCoverage Get-AzLocalUpdateRunFailures Get-AzLocalApplyUpdatesScheduleConfig Resolve-AzLocalCurrentUpdateRing Get-AzLocalApplyUpdatesScheduleNextFirings New-AzLocalApplyUpdatesScheduleConfig Update-AzLocalApplyUpdatesScheduleConfig Get-AzLocalApplyUpdatesScheduleCycleCalendar Get-AzLocalFleetHealthOverview Get-AzLocalLatestSolutionVersion Sync-AzLocalClusterUpdateSummary Get-AzLocalFleetConnectivityStatus New-AzLocalFleetConnectivityStatusSummary Add-AzLocalPipelineVersionBanner Export-AzLocalAuthValidationReport Invoke-AzLocalClusterInventory Set-AzLocalClusterUpdateRingTagFromCsv Export-AzLocalUpdateRunMonitorReport Export-AzLocalFleetUpdateStatusReport Export-AzLocalClusterUpdateReadinessReport Export-AzLocalFleetConnectivityStatusReport Export-AzLocalApplyUpdatesScheduleAudit Export-AzLocalFleetHealthStatusReport Resolve-AzLocalPipelineUpdateRing Export-AzLocalClusterReadinessGateReport Invoke-AzLocalReadinessGatedClusterUpdate Add-AzLocalApplyUpdatesStepSummary Add-AzLocalNoReadyClustersStepSummary Invoke-AzLocalItsmTicketingFromArtifact Update-AzLocalSideloadCatalog Resolve-AzLocalSideloadPlan Invoke-AzLocalSideloadUpdate Export-AzLocalSideloadStatusReport Add-AzLocalSideloadStepSummary

PSEditions

Desktop Core

Dependencies

This module has no dependencies.

Release Notes

## Version 0.8.89 - Sharpens the Config: 3 (Export-AzLocalApplyUpdatesScheduleAudit) "Recommended in-flight monitor schedule (Update: 4)" so the recommended monitor-updates.yml cron only polls when an update can actually be in flight, instead of 24x7. Replaces -MonitorFiresPerHour with -MonitorPollIntervalMinutes (15/20/30/60/120/180/240 min - now supports multi-hour cadence for slow multi-node runs that can take up to ~48h) and adds -MonitorInFlightHours (0-48, default 6), a buffer past the maintenance window for runs still finishing. Monitor DAYS now derive from apply-updates-schedule.yml ring eligibility (the cycle calendar) when -SchedulePath is supplied, otherwise from the apply-updates.yml cron weekday(s); monitor HOURS are bounded to the UpdateStartWindow span plus the in-flight buffer, falling back to all-hours when a run can cross midnight (an overnight window, -MonitorTrailingDays > 0, or the buffer pushing past 24h). Adds an Automation-Pipeline-Examples README section "How to control which updates are installed, and when" documenting the three-layer day/cadence/time model (apply-updates-schedule.yml -> apply cron -> UpdateStartWindow) and the tag -> schedule -> Config: 3 cron -> Update: 3/4 paste workflow. No public-API export-count change (still 61). GENERATED_AGAINST_MODULE_VERSION bumped to '0.8.89'.

and stale-update-assessment detection so a cluster that reports "Up to date" while a newer solution build is actually available (a stale cached assessment) is detected and refreshed without leaving the pipeline. New Public cmdlet `Sync-AzLocalClusterUpdateSummary` (export count 60 -> 61) POSTs the `Microsoft.AzureStackHCI/clusters/updateSummaries/default/checkUpdates` ARM action (the portal "Check for updates" button) on the `2026-03-01-preview` API to force clusters to re-evaluate update availability; selectable by name, Resource ID, or UpdateRing tag; fire-and-forget by default with an optional `-Wait` that polls updateSummaries lastChecked and returns the refreshed UpdateState / CurrentVersion / AvailableUpdateCount; supports -WhatIf/-Confirm, -Force, -PassThru. `Export-AzLocalClusterUpdateReadinessReport` gains an opt-out stale-assessment auto-scan: any UpToDate cluster behind the latest released YYMM (new private `Test-AzLocalUpdateAssessmentStale` + `Get-AzLocalLatestSolutionVersion`) triggers a fire-and-forget refresh; new -SkipStaleAssessmentScan switch, -StaleAssessmentApiVersion parameter, "Stale update assessments" report section, and StaleAssessmentCount / StaleAssessmentClusters / StaleAssessmentScanTriggered PassThru fields. Authorization / 403 failures on the refresh are now surfaced in the console log (the full az rest error including the exact denied Action name, plus an explicit RBAC warning) and are non-fatal so the report still completes. Operator-facing stale Step.N_*.yml cross-references in rendered report text and pipeline-example doc strings are de-numbered to the descriptive filenames shipped since v0.8.7. NOTE: checkUpdates is preview and not yet in the Microsoft.AzureStackHCI provider operations catalog, so it cannot be added to the least-privilege custom role yet - use Azure Stack HCI Administrator / Contributor or -SkipStaleAssessmentScan until it GAs (future custom-RBAC requirement documented in README, docs/rbac.md, and Automation-Pipeline-Examples/README.md). `GENERATED_AGAINST_MODULE_VERSION` bumped from `'0.8.87'` to `'0.8.88'` across all bundled pipeline templates.

## Version 0.8.87 - Renames the bundled pipeline display names into a three-group `Config: N` / `Monitor: N` / `Update: N` scheme (single-digit, e.g. `Monitor: 1 - Fleet Connectivity Status`, `Update: 4 - Monitor In-Flight Updates`), replacing the former `Setup: 0N` / `Fleet: 0N` prefixes; filenames and `AZLOCAL-PIPELINE-ID` values are unchanged. Also renames the "Orphan ARBs" section in the `New-AzLocalFleetConnectivityStatusSummary` (Monitor: 1 - Fleet Connectivity Status) output to "Non-Azure Local and/or Orphan ARB appliances" and adds a caveat that an Arc resource bridge with no matching in-scope Azure Local cluster is NOT necessarily orphaned - Arc resource bridge is also used by VMware vSphere and SCVMM. Adds investigate-before-acting guidance. KPI note, causes list, and cluster-table cross-reference updated to match. The Cluster Connectivity table is split into "Cluster with Connectivity Issues" (shown first) and "Cluster without Connectivity Issues" (Connected + ARB Running, collapsed). Output text only - no public API or behavioural change. Export count unchanged (still 60). `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.8.87'`. Also: `Export-AzLocalUpdateRunMonitorReport` (Update: 4) now writes per-`<testcase>` `<properties>` (ClusterName/ClusterResourceId/UpdateName/Status/CurrentStep/portal URLs) into `update-monitor.xml`, with Status values StepError/LongRunningStep/LongRunningOverall/InProgress/Failed/AttemptWithoutRun, so `New-AzLocalIncident` can dedupe and deep-link stuck/failed/attempt-without-run clusters. The bundled `monitor-updates.yml` (GitHub + Azure DevOps) gains an opt-in ITSM ticketing step (`raise_itsm_ticket`/`raiseItsmTicket`, default off). The sample ITSM matrix gains AttemptWithoutRun/StepError (raise) and opt-in LongRunningOverall/LongRunningStep entries. `Export-AzLocalApplyUpdatesScheduleAudit` (Config: 3) gains an always-on "Recommended in-flight monitor schedule (Update: 4)" section plus `-MonitorFiresPerHour` (1-12, default 2) and `-MonitorTrailingDays` (0-14, default 3). Additive.

## Version 0.8.86 - Patch: renamed the three onboarding pipeline templates from `Setup: 0N` to `Config: 0N` (operator-facing display name only; filenames, `AZLOCAL-PIPELINE-ID` values, aliases, prune logic, and cmdlet behaviour unchanged). Superseded by the v0.8.87 `Config:`/`Monitor:`/`Update:` naming scheme. Export count unchanged (still 60). `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.8.86'`.

## Version 0.8.85 - Patch: introduced Setup/Fleet pipeline naming, added the merged GitHub onboarding workflow `setup-validate-and-inventory.yml`, and added optional deprecated-file pruning guarded by AZLOCAL-PIPELINE-ID verification. Superseded by later naming. No public API or behavioural change. `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.8.85'`.

## Version 0.8.83 - Patch: fix-forward for v0.8.82 Item-5. The Step.08 `UpdateLastAttempt` reconciliation in `Export-AzLocalUpdateRunMonitorReport` reads `$inv.tags` from `Get-AzLocalClusterInventory`, but the v0.8.82 inventory projection did not carry the raw ARM `tags` bag - so the "Recent update attempts with no observable updateRun" section was silently always empty in production. v0.8.83 surfaces the raw `tags` bag on every inventory row (in-memory only; the CSV / JSON export keeps its explicit `$selectColumns` whitelist - new regression test asserts both). Also wires `attempts_without_run` into the GitHub Actions `monitor-updates.yml` `jobs.outputs:` block (ADO `Set-AzLocalPipelineOutput` auto-publishes so only an ADO docstring refresh needed), and corrects the `Export-AzLocalUpdateRunMonitorReport` "6 step outputs" docstring to "7 step outputs". No public API change. Export count unchanged (still 60). All bundled pipeline templates bump `GENERATED_AGAINST_MODULE_VERSION` from `'0.8.82'` to `'0.8.83'`.

## Version 0.8.82 - Patch: four Step-summary UX polish fixes from v0.8.81 manual pipeline-run review. (1) Step.05 Summary counts table no longer duplicates labels: each row reused the shared `Get-AzLocalStatusIconMap` cell (which already includes its own label) AND appended a duplicate trailing label, producing `Ready for Update Ready for update` / `Up to Date Up to date` / `Action Required Not ready for update` / `Health Failure Clusters with Critical health failures`. Fixed by emitting the icon-map cell unmodified; the HealthFailure row keeps `(Clusters with Critical health failures)` in parentheses since it counts something different from the readiness cascade. (2) Step.05 All clusters detail table now sorts by Status priority first (`InProgress` -> `HealthFailure` -> `UpdateFailed` -> `ActionRequired` -> `SbeBlocked` -> `NeedsInvestigation` -> `ReadyForUpdate` -> `UpToDate`), then UpdateRing + ClusterName. In-flight + remediation rows surface at the top; Up-to-Date drops to the bottom. (3) Step.05 Not-Ready clusters (review first) table no longer leaves the `Blocking reasons` column as `-` for rows blocked by `UpdateFailed` / `NeedsAttention` / `InProgress` / Warning-only HealthFailure / SbeBlocked - the renderer now derives an actionable token from the Status bucket when the upstream `BlockingReasons` is empty (e.g. `UpdateInProgress (run in-flight)`, `UpdateState=NeedsAttention`, `PrerequisiteRequired (SBE update first)`, `HealthState=Failure (no Critical findings; review Warning findings)`), with `; HealthState=Warning` appended where relevant. (4) Step.10 Detailed Results Description column inline-vs-collapse threshold bumped from 120 to 280 characters, so short single-sentence descriptions render inline and only long multi-line descriptions collapse behind `<details><summary>view</summary>...</details>`. The previous 120-char cutoff put roughly half the rows inline and half collapsed on the same table, which looked broken. No public API or export-count change (still 60). All bundled pipeline templates bump `GENERATED_AGAINST_MODULE_VERSION` from `'0.8.81'` to `'0.8.82'`.

For full release notes see:
https://github.com/NeilBird/Azure-Local/blob/main/AzLocal.UpdateManagement/CHANGELOG.md

FileList

Version History

Version Downloads Last updated
0.8.94 48 6/19/2026
0.8.93 25 6/18/2026
0.8.92 10 6/18/2026
0.8.91 13 6/18/2026
0.8.90 5 6/18/2026
0.8.89 (current version) 7 6/18/2026
0.8.88 35 6/17/2026
0.8.87 37 6/16/2026
0.8.86 17 6/16/2026
0.8.85 6 6/16/2026
0.8.84 34 6/15/2026
Show less