AzLocal.UpdateManagement

0.9.14

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.9.14

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

Install-PSResource -Name AzLocal.UpdateManagement -Version 0.9.14

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 Invoke-AzLocalFailedUpdateRetry 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 Assert-AzLocalAzureSubscriptionAccess Assert-AzLocalPipelineReport Export-AzLocalAuthValidationReport Invoke-AzLocalClusterInventory Set-AzLocalClusterUpdateRingTagFromCsv Export-AzLocalUpdateRunMonitorReport Export-AzLocalFleetUpdateStatusReport Export-AzLocalClusterUpdateReadinessReport Export-AzLocalFleetConnectivityStatusReport Export-AzLocalApplyUpdatesScheduleAudit Export-AzLocalFleetHealthStatusReport Resolve-AzLocalPipelineUpdateRing Export-AzLocalClusterReadinessGateReport Invoke-AzLocalReadinessGatedClusterUpdate Invoke-AzLocalReadinessGatedFailedUpdateRetry Add-AzLocalFailedUpdateRetryHintSummary Add-AzLocalApplyUpdatesStepSummary Add-AzLocalNoReadyClustersStepSummary Invoke-AzLocalItsmTicketingFromArtifact Update-AzLocalSideloadCatalog Resolve-AzLocalSideloadPlan Invoke-AzLocalSideloadUpdate Export-AzLocalSideloadStatusReport Add-AzLocalSideloadStepSummary Get-AzLocalExcludedSubscription Set-AzLocalExcludedSubscription

PSEditions

Desktop Core

Dependencies

This module has no dependencies.

Release Notes

## Version 0.9.14 - Surface allow-list-suppressed Ready updates in Update: 1 - Assess Update Readiness. When an `allowedUpdateVersions` allow-list filters out every Ready update on a cluster, `Export-AzLocalClusterUpdateReadinessReport` now makes that visible: the "All clusters detail" table adds an `Available Ready updates` column (a lone Ready update renders inline; 2+ collapse behind a `<details>` expander) and the affected row's Status is marked `Up to Date *` with a conditional footnote explaining the cluster is up to date ONLY because the allow-list excluded every Ready update. `Get-AzLocalClusterUpdateReadiness` also emits an allow-list-mismatch console warning per suppressed cluster listing the exact excluded update name/version to copy into the schedule YML. The Select-AzLocalNextUpdateForCluster matcher accepts BOTH the full update `name` and the bare `properties.version`. Pipeline hardening: the shared "Install AzLocal.UpdateManagement from PSGallery" step in all 20 GitHub Actions + Azure DevOps templates now wraps `Install-Module` in a 3-attempt exponential-backoff (10s, 20s) retry so a transient PSGallery lookup blip ("No match was found ... 'AzLocal.UpdateManagement'") no longer fails the run on the first hit. Docs: added a vendor/platform-named OEM SBE example and standardised the `Solution`/`SBE` name form. No public function, parameter or export-count change (still 68). `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.9.14'`.

## Version 0.9.13 - Bug fix: Monitor: 3 - Fleet Update Status (`Export-AzLocalFleetUpdateStatusReport`) no longer crashes on a failed update run that carries a short deepest-error message. The truncation guard `[string]$f.DeepestErrMsg.Length` parses as `[string]($f.DeepestErrMsg.Length)` (member access binds tighter than the cast), so it stringified the LENGTH and then LEXICALLY compared it to 4000 - "50" -gt 4000 is TRUE - pushing a short string into `.Substring(0,4000)` and throwing "Index and length must refer to a location within the string". The message is now cast to a string once (`$deepMsg = [string]$f.DeepestErrMsg`) before the integer length check. Pre-existing since v0.8.5; surfaced on a real fleet-update-status run #40. No public function, parameter or export-count change (still 68). `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.9.13'`.

## Version 0.9.12 - Pipeline preflight guards: fail meaningfully (and visibly in the run summary) on zero subscriptions or missing reports. Two new Public cmdlets turn two confusing failure cascades into one clear, actionable message. (1) `Assert-AzLocalAzureSubscriptionAccess` counts the Enabled subscriptions visible to the authenticated identity (`az account list`); with none it writes a remediation block to the run summary (assign Reader/RBAC, confirm tenant/client id), sets `subscription_count`=0, and throws - replacing the cryptic "No subscriptions found for ***". (2) `Assert-AzLocalPipelineReport` verifies the collect step produced its report file(s) BEFORE the publish step fires its misleading "No test report files were found" warning; on zero output it points at the real upstream cause and throws. Both are wired into ALL 10 GitHub Actions and ALL 10 Azure DevOps templates (publish steps now skip on upstream failure). New Private helper `Write-AzLocalPipelineError`. Also: Monitor: 2 - Fleet Health Status (`Export-AzLocalFleetHealthStatusReport`) now adds an operator "Knowledge" note (shown only when >=1 health check is reported) reminding operators to re-run the system health checks (`Invoke-SolutionUpdatePrecheck -SystemHealth`) after remediating a failure so the ARM-stored health results refresh (per Step 7 of the update-troubleshooting docs). Export count 66 -> 68. `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.9.12'`.

## Version 0.9.11 - Readiness allow-list scope-leak fix + monitor default tuning. Bug fix: `Export-AzLocalClusterUpdateReadinessReport` leaked the opt-in `-SchedulePath` value into the shared `$scopeParams` hashtable, which was then reused for `Test-AzLocalClusterHealth` (a cmdlet with no `SchedulePath` parameter) - so the v0.9.1 assess-update-readiness pipeline died at the health step. Readiness now clones `$scopeParams` into a dedicated `$readinessParams` for the allow-list call and keeps the health calls on the clean `$scopeParams`. Behaviour change: `Export-AzLocalApplyUpdatesScheduleAudit` monitor-recommendation defaults tightened to reduce over-polling - `-MonitorTrailingDays` 3 -> 1 and `-MonitorInFlightHours` 6 -> 2 (cmdlet + GitHub/ADO `apply-updates-schedule-audit.yml` inputs; these defaults also apply to scheduled, not just manual, runs). No public function or export-count change (still 66). `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.9.11'`.

## Version 0.9.10 - Subscription-exclusion starter hardening. The starter `Excluded-Subscription-Ids.csv` dropped by `Copy-AzLocalPipelineExample` is now a CLEAN, comment-free CSV (column header only); all operator guidance moves to a new sidecar `Excluded-Subscription-Ids_README.txt`. Embedding `#` guidance lines inside the CSV broke parsing once the file was opened and re-saved in Excel: Excel re-quotes any line containing a quote, so the `#` comment lines no longer started with `#`, survived the parser comment filter, and the first was mistaken for the header - `Resolve-AzLocalExcludedSubscriptionId` then threw "does not contain a 'Subscription IDs' column" and the real GUID rows were never read. Keeping the CSV comment-free lets it round-trip through spreadsheet editors unchanged; the README (never read by the parser) carries the purpose, activation steps, rules and a worked example. Both files are default-on for `-Platform GitHub|AzureDevOps`, suppressed by the existing `-SkipStarterExclusions` switch, and neither overwrites an operator copy. ONE-TIME MIGRATION: an early adopter who already landed on the v0.9.1 commented format is healed automatically - when `Copy`/`Update-AzLocalPipelineExample` next runs, a new private helper (`Repair-AzLocalExcludedSubscriptionCsv`) detects a legacy commented CSV and rewrites it IN PLACE to the clean format, recovering real subscription-id rows via a GUID regex over the raw lines so it works even on a file Excel already mangled (a clean v0.9.10 CSV is left untouched - idempotent no-op). One new private helper; no public function, parameter or export-count change. `GENERATED_AGAINST_MODULE_VERSION` bumped to `'0.9.10'`.

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.9.16 13 7/6/2026
0.9.15 170 7/2/2026
0.9.14 (current version) 19 7/2/2026
0.9.13 18 7/2/2026
0.9.12 58 7/1/2026
0.9.11 89 6/29/2026
0.9.10 105 6/26/2026
0.9.1 13 6/26/2026
0.9.0 52 6/25/2026
0.8.99 6 6/25/2026
0.8.98 5 6/25/2026
0.8.97 35 6/24/2026
0.8.96 34 6/23/2026
0.8.95 10 6/23/2026
0.8.94 107 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 7 6/18/2026
0.8.88 41 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 more