Update your Azure Local, version 23H2 via PowerShell

Applies to: Azure Local, version 23H2

This article describes how to apply a solution update to your Azure Local via PowerShell.

The procedure in this article applies to both single node and multi-node systems that run the latest version of Azure Local with the orchestrator (Lifecycle Manager) installed. If your system was created via a new deployment of Azure Local, version 23H2, then the orchestrator was automatically installed as part of the deployment.

Important

The procedure described here applies only when updating from one version of Azure Local, version 23H2 to another higher version. For information on updates for older versions, see Update clusters for Azure Local, version 22H2.

About solution updates

The Azure Local solution updates can consist of platform, service, and solution extension updates. For more information on each of these types of updates, see About updates for Azure Local, version 23H2.

When you apply a solution update, here are the high-level steps that you take:

  1. Make sure that all the prerequisites are completed.
  2. Connect to your Azure Local instance via remote PowerShell.
  3. Confirm current installed software versions and verify that your cluster is in good health.
  4. Discover the updates that are available and filter the ones that you can apply to your system.
  5. (Recommended) Predownload the updates and assess the update readiness of your system.
  6. Install the updates and track the progress of the updates. Monitor the detailed progress as needed.
  7. Verify the version of the updates installed.

The time taken to install the updates varies based on the following factors:

  • Content of the update.
  • Load on your system.
  • Number of machines in your system.
  • Type of hardware used.
  • Solution extension used.

The approximate time estimates for a typical single or multi-node system are summarized in the following table:

System/Time Time for health check
hh:mm:ss
Time to install update
hh:mm:ss
Single node 0:01:44 1:25:42
4-nodes 0:01:58 3:53:09

Prerequisites

Before you begin, make sure that:

  • You have access to an Azure Local, version 23H2 system that is running 2311 or higher. The system should be registered in Azure.
  • You have access to a client that can connect to your Azure Local.
  • You have access to the solution update over the network.

Connect to your Azure Local

Follow these steps on your client to connect to one of the machines in your Azure Local.

  1. Run PowerShell as administrator on the client that you're using to connect to your system.

  2. Open a remote PowerShell session to a machine on your Azure Local. Run the following command and provide the credentials of your machine when prompted:

    $cred = Get-Credential
    Enter-PSSession -ComputerName "<Computer IP>" -Credential $cred 
    

    Note

    Sign in using your deployment user account credentials. This is the account you created when preparing Active Directory and used to deploy Azure Local.

    Expand this section to see an example output.

    Here's an example output:

    PS C:\Users\Administrator> $cred = Get-Credential
     
    cmdlet Get-Credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    PS C:\Users\Administrator> Enter-PSSession -ComputerName "100.100.100.10" -Credential $cred 
    [100.100.100.10]: PS C:\Users\Administrator\Documents>
    

Step 1: Confirm software and verify system health

Before you discover the updates, make sure that your system is running Azure Local, version 23H2, software version 2311 or later.

  1. Make sure that you're connected to the machine using the deployment user account. Run the following command:

    whoami
    
  2. To ensure that the system is running Azure Local, version 23H2, run the following command on one of the machines of your system:

    Get-SolutionUpdateEnvironment
    
    Expand this section to see an example output.
    PS C:\Users\lcmuser> Get-SolutionUpdateEnvironment
    ResourceId : redmond 
    SbeFamily : GenA 
    HardwareModel : Contoso680 
    LastChecked : 10/2/2024 12:38:21 PM 
    PackageVersions : {Solution: 10.2408.0.29, Services: 10.2408.0.29, Platform: 1.0.0.0, SBE: 4.1.2409.1} 
    CurrentVersion : 10.2408.0.29 
    CurrentSbeVersion : 4.1.2409.1 
    LastUpdated : 
    State : UpdateAvailable 
    HealthState : Success 
    HealthCheckResult : {Storage Subsystem Summary, Storage Pool Summary, Storage Services Physical Disks Summary, Storage 
    Services Physical Disks Summary...} 
    HealthCheckDate : 10/2/2024 10:46:44 AM 
    AdditionalData : 
    
  3. Note the CurrentVersion on your system. The current version reflects the solution version that your system is running.

  4. Review the HealthState on your system and verify that your system is in good health. If the HealthState is Failure, Error, or Warning, see Troubleshoot readiness checks before you proceed.

Step 2: Discover the updates

Follow these steps to discover the available updates for your system:

  1. Connect to a machine on your Azure Local using the deployment user account.

  2. Review details of updates that are Ready to install using Get-SolutionUpdate.

    Get-SolutionUpdate | Where-Object {$_.State -like "Ready*" -or $_.State -like "Additional*"} | FL DisplayName, Description, ResourceId, State, PackageType 
    
    Expand this section to see an example output.

    Here's an example output:

    PS C:\Users\lcmuser> Get-SolutionUpdate | Where-Object {$_.State -like "Ready*" -or $_.State -like "Additional*"} | FL DisplayName, Description, ResourceId, State, PackageType
    
    DisplayName           : 2024.10 Cumulative Update
    ResourceId            : redmond/Solution10.2408.2.7
    Version               : 10.2408.2.7
    State                 : Ready
    PackageType           : Solution
    
    DisplayName           : SBE_Contoso_GenA_4.1.2410.5
    ResourceId            : redmond/SBE4.1.2410.5
    Version               : 4.1.2410.5
    State                 : AdditionalContentRequired
    PackageType           : SBE
    

    This may list one or more options including entries for both full Solution updates (that may also include a Solution Builder Extension) and standalone SBE updates.

    If you don't see an expected update listed, remove the filter from the command to see if it's listed in non-ready state:

    Get-SolutionUpdate | FL DisplayName, Description, ResourceId, State, PackageType 
    

    For more information, see About Update phases for details on update states.

  3. Select the update you wish to install and note its ResourceId. Review the details of the update to confirm you have selected the desired update to install.

    $Update = Get-SolutionUpdate –Id <ResourceId>
    $Update
    
    Expand this section to see an example output.

    Here's an example output:

    PS C:\Users\lcmuser> $Update = Get-SolutionUpdate –Id redmond/Solution10.2408.2.7
    PS C:\Users\lcmuser> $Update
    ResourceId            : redmond/Solution10.2408.2.7
    InstalledDate         : 
    Description           :
    State                 : Ready
    KbLink                : https://learn.microsoft.com/en-us/azure-stack/hci/
    MinVersionRequired    : 10.2408.0.0
    MinSbeVersionRequired : 2.0.0.0
    PackagePath           : C:\ClusterStorage\Infrastructure_1\Shares\SU1_Infrastructure_1\Updates\Packages\Solution10.2408
                            .2.2
    PackageSizeInMb       : 1278
    DisplayName           : 2024.10 Cumulative Update
    Version               : 10.2408.2.7
    SbeVersion            : 4.1.2410.5
    Publisher             : Microsoft
    ReleaseLink           : https://learn.microsoft.com/en-us/azure-stack/hci/
    AvailabilityType      : Online
    PackageType           : Solution
    Prerequisites         : {}
    UpdateStateProperties : The update requires additional content distributed by the OEM.
    AdditionalProperties  : {SBEReleaseLink, SBENotifyMessage, SBEFamily, SBEPublisher...}
    ComponentVersions     : {Services: 10.2408.2.7, Platform: 10.2408.2.7, SBE: 4.1.2410.5}
    RebootRequired        : Unknown
    HealthState           : Unknown
    HealthCheckResult     : 
    HealthCheckDate       : 1/1/0001 12:00:00 AM
    BillOfMaterials       : {PlatformUpdate, ServicesUpdate}
    

    Note

    It is normal for HealthState to be Unknown for an update that has not yet been scheduled or prepared.

  4. Optionally review the versions of the update package components.

    $Update = Get-SolutionUpdate -Id <ResourceID>
    $Update.ComponentVersions
    
    Expand this section to see an example output.

    Here's an example output:

    PS C:\Users\lcmuser> $Update = Get-SolutionUpdate -Id redmond/Solution10.2408.2.7
    
    PS C:\Users\lcmuser> $Update.ComponentVersions
    
    PackageType Version      LastUpdated
    ----------- -------      -----------
    Services    10.2408.2.7
    Platform    10.2408.2.7
    SBE         4.1.2410.5
    
    PS C:\Users\lcmuser>
    
    

You can now proceed to Download and install the updates.

Step 3: Import and rediscover updates

Importing updates could be required in one of the following scenarios:

  • The update you wish to install reports an AdditionalContentRequired state. Some extra content may be required before you can schedule the update in the AdditionalContentRequiredstate. For details on this state and on solution extension updates, see Solution Extension updates on Azure Local, version 23H2.

  • The update you wish to install isn't listed because Support is providing you with a private release to address an issue you're experiencing.

  • The update is listed as Ready, but as your system has limited network connectivity, you want to avoid the online download phase of the solution extension update.

Follow these steps to import and discover your solution updates.

  1. Connect to a machine on your Azure Local using the deployment user account.

  2. Go to the network share and acquire the update package that you use. Verify that the update package you import contains the following files:

    • SolutionUpdate.xml
    • SolutionUpdate.zip
    • AS_Update_10.2408.2.7.zip

    If a solution builder extension is part of the update package, you should also see the following files:

    • SBE_Contoso_GenA_4.1.2410.5.xml
    • SBE_Contoso_GenA_4.1.2410.5.zip
    • SBE_Discovery_Contoso.xml
  3. Download the files you intend to import to a location that your Azure Local instance can access. If you're importing a solution extension, you always download three files that matching the following naming pattern:

    Filename pattern Example Description
    SBE_Discovery_<Manufacturer>.xml SBE_Discovery_Contoso.xml A solution extension discovery manifest that enables update discovery.
    SBE_<Manufacturer>_<Family>_<Version>.xml SBE_Contoso_GenA_4.1.2410.5.xml A file with solution extension inventory and signed software Bill of Materials
    SBE_<Manufacturer>_<Family>_<Version>.zip SBE_Contoso_GenA_4.1.2410.5.zip A file with solution extension payload
  4. Create a folder for discovery by the update service at the following location in the infrastructure volume of your system.

    New-Item C:\ClusterStorage\Infrastructure_1\Shares\SU1_Infrastructure_1\import -ItemType Directory 
    
  5. Copy the update files to the folder you created in the previous step.

  6. Manually discover the update package using the Update service. Run the following command:

    Add-SolutionUpdate -SourceFolder C:\ClusterStorage\Infrastructure_1\Shares\SU1_Infrastructure_1\import
    
  7. Verify that the Update service discovers the update package and that it's available to start preparation and installation. Repeat the Get-SolutionUpdate command to rediscover the updates.

You can download the update and perform a set of checks to verify your cluster’s update readiness without starting the installation.

  1. To download the updates without starting the installation, run the following command:

    Get-SolutionUpdate -Id <ResourceId> | Start-SolutionUpdate –PrepareOnly
    
    Expand this section to see an example output.

    Here’s an example output:

    PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 | Start-SolutionUpdate –PrepareOnly
    redmond/SBE4.1.2410.9/<GUID>
    
  2. To track the update progress, monitor the update state. Run the following command:

    Get-SolutionUpdate -Id <ResourceId> | ft Version,State,UpdateStateProperties,HealthState
    

    When the update starts, the following actions occur:

    • Download of the updates begins. Depending on the size of the download package and the network bandwidth, the download might take several minutes.
    Expand this section to see an example output.

    Here's an example output when the updates are being downloaded:

    PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 | ft Version,State,HealthState
    
    Version              State          HealthState
    -------              -----          ---------------------
    10.2408.2.7          Downloading    InProgress
    
  3. Once the package is downloaded, readiness checks are performed to assess the update readiness of your system. For more information about the readiness checks, see Update phases. During this phase, the State of the update shows as HealthChecking.

    Expand this section to see an example output.
    PS C:\Users\lcmuser> Get-SolutionUpdate|ft Version,State,UpdateStateProperties,HealthState
    
    Version         State             HealthState
    -------         -----             --------------------- 
    10.2408.2.7     HealthChecking    InProgress
    
  4. When the readiness checks are done, the system is ready to install updates. The State of the update shows as ReadyToInstall. If the State of the update shows as HealthCheckFailed, see Troubleshoot readiness checks before you proceed.

Step 5: Start the update

During the install, the system machines may reboot and you may need to establish the remote PowerShell session again to monitor the updates. If updating a single machine, your Azure Local experiences a downtime.

Start an update by selecting a single update and passing it to Start-SolutionUpdate.

$InstanceId = Get-SolutionUpdate -Id <ResourceId>  | Start-SolutionUpdate

Note

If step 3 was skipped (and you did not make a similar call to Start-SolutionUpdate -PrepareOnly) calling Start-SolutionUpdate will first download the updates and perform a set of checks to verify your cluster's update readiness prior to starting the update install.

Expand this section to see an example output.
PS C:\Users\lcmuser> $InstanceId = Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 | Start-SolutionUpdate

This starts the process to install the update.

Tip

Save the $InstanceId as you could use it later to Troubleshoot solution updates for Azure Local.

Step 6: Track update progress

Microsoft recommends tracking cluster update progress in the Azure portal after the update has started. The portal is a great option for tracking update progress even when the update is started via PowerShell as it isn't subject to the disruptions in status reporting.

Tip

  • If monitoring via PowerShell, we recommend that you connect your PowerShell session to the last server in your cluster to avoid the session from disconnecting early. The sessions disconnect as the systems reboot so switching to monitor from an already updated server can minimize the frequency of disconnects.
  • We recommend that you track cluster update progress in the Azure portal to avoid having to reconnect to PowerShell sessions following a machine reboot.

Follow these steps to track update progress using PowerShell.

  1. To track the update progress, monitor the update state. Run the following command:

    Get-SolutionUpdate -Id <ResourceId> | ft Version,State,UpdateStateProperties,HealthState
    

    The update progresses through several states as described in Review update phases.

    Using the above command the following examples show how to monitor the update as it progresses through those phases using the State and UpdateStateProperties properties.

    • Downloading state

      Shortly after Start-SolutionUpdate is called, the download of the updates begins. Depending on the size of the download package and the network bandwidth, the download might take several minutes.

      Expand this section to see an example output.

      Here's an example output when the updates are being downloaded:

      PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 |ft Version,State,UpdateStateProperties,HealthState
      
      Version              State         HealthState
      -------              -----         ------------
      10.2408.2.7          Downloading   Unknown
      
    • Preparing state

      Once the updates are downloaded, the updates need be prepared. In the preparation state, the update files hashes are confirmed and files are extracted to prepare and stage update files.

      Expand this section to see an example output.

      Here's an example output when the updates are being downloaded:

      PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 |ft Version,State,HealthState
      
      Version              State       HealthState
      -------              -----       -----------
      10.2408.2.7          Preparing   Unknown
      
    • HealthChecking state

      Once the updates are prepared, readiness checks are performed to assess the update readiness of your cluster. For more information about the readiness checks, see Update phases.

      During this phase, the State of the update shows as HealthChecking. If the State of the update shows as HealthCheckFailed, see Troubleshoot readiness checks before you proceed.

      Expand this section to see an example output.

      Here's an example output when the updates are undergoing HealthChecking:

      PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 |ft Version,State,HealthState
      
      Version              State           HealthState
      -------              -----           -----------
      10.2408.2.7          HealthChecking  Unknown
      
    • Installing state When the system is ready, the update transitions to the installing state. During this phase, the State of the updates shows as Installing and UpdateStateProperties shows the percentage of the installation that was completed.

      Expand this section to see an example output.

      Here's an example output when the updates are undergoing Installing:

      PS C:\Users\lcmuser> Get-SolutionUpdate -Id redmond/Solution10.2408.2.7 |ft Version,State,HealthState
      
      Version              State       HealthState
      -------              -----       -----------
      10.2408.2.7          Installing   Unknown
      

Once the installation is complete, the State changes to Installed. For more information on the various states of the updates, see Installation progress and monitoring.

Step 7: Resume the update (if needed)

To resume a previously failed update run via PowerShell, use the following command:

Get-SolutionUpdate -Id <ResourceId>  | Start-SolutionUpdate

To resume a previously failed update due to update readiness checks in a Warning state, use the following command:

Get-SolutionUpdate -Id <ResourceId>  | Start-SolutionUpdate -IgnoreWarnings    

To troubleshoot other update run issues, see Troubleshoot updates.

Step 8: Verify the installation

After the updates are installed, verify the solution version of the environment and the operating system version.

  1. After the update is in Installed state, check the environment solution version. Run the following command:

    Get-SolutionUpdateEnvironment | ft State, CurrentVersion
    
    Expand this section to see an example output.
    PS C:\Users\lcmuser> Get-SolutionUpdateEnvironment | ft State, CurrentVersion
    
    State               CurrentVersion
    -----               --------------
    AppliedSuccessfully 10.2408.2.7
    
    
  2. Check the operating system version to confirm it matches the recipe you installed. Run the following command:

    cmd /c ver
    
    Expand this section to see an example output.

    Here's a sample output:

    PS C:\Users\lcmuser> cmd /c ver
    
    Microsoft Windows [Version 10.0.25398.1189]
    PS C:\Users\lcmuser>
    

Next step