Hosting an Update Retriever Repository in an Azure Blob

When it comes to managing a centralized Update Retriever repository, challenges arise with widely distributed environments.  This is where leveraging a cloud storage solution can bring value.

I thought this post may be helpful for anyone piloting a "modern" way of updating their Think products.  This walk-through assumes the following tools are in place:
I won't cover creating the Storage account or Blob, just the process of uploading the Update Retriever content to the Blob container and how to configure the ThinInstaller Configuration XML on the client.

Populating the UR Repo

First, you'll need to download any new updates to your local machine or network share.  Currently, you can only point the UR repository location to a local drive or UNC path.

Once all updates are downloaded successfully, you'll need to upload them to the Blob.  There's a few different ways to accomplish this. 

 Storage Explorer: Authenticate to your Storage account, navigate to the folder containing your updates and choose to upload by folder

 Once complete, you should see all data uploaded in the Activities pane

AzCopy: You'll need a few more pieces of information before uploading with AzCopy.  
  •  Blob Container URL (Storage Account/Blobs/Blob Container/Properties)

With this information, you should now be able to upload the content.  Here's a sample command to execute using AzCopy

AzCopy.exe /Source:"C:\lenovoUpdates" /Dest: /DestSAS:"<your-sas-token>" /S

The results will look something like this

PowerShell: Similar to AzCopy but instead using the Set-AzStorageBlobContent cmdlet.  You'll need the Azure PowerShell module installed first.  Below is a simple, sample script that was pieced together from the examples provided by the MS docs.

$srcPath = "C:\lenovoUpdates"
$token = "your-sas-token"
$containerName = 'your-container-name'
$storageContext = New-AzStorageContext -StorageAccountName 'your-storage-account' -SasToken $token

ls -File $srcPath -Recurse | Set-AzStorageBlobContent `
  -Container $containerName `
  -BlobType Block `
  -Context $storageContext -Force

An example capture once the upload kicks off

Client Side Configuration
Now that the repository is ready, you'll need to make a quick change to the ThinInstaller Configuration XML to direct the client to Blob.  
Open the ThinInstaller.exe.configuration with NotePad or Notepad++ and set the new repo path the Blob Container URL as noted earlier. 

 Now, when ThinInstaller is launched it will connect to the UR repo in Azure


  1. Phil I really like this solution but add the moment this is only working with Lenovo ThinInstaller.
    Add the moment we using Lenovo System Update but we are looking add moving to Lenovo Vantage for the drivers and firmware updates.
    Is it also possible to get this working with with the Azure setup? This way we can easily host the Lenovo Cloud Repository on Azure and use Lenovo System Update or Lenovo Vantage.

    1. Hi!

      Currently, Vantage only supports a local or UNC path custom repository, so pointing to an https repo as noted in this blog wouldn't work. It may be worth investigating an Azure File share, which can be accessed via UNC path. I haven't tested this scenario but may look into it!

  2. This is fantastic as I am starting to manage more and more InTune based Kiosk devices in my org.

  3. Hello thanks for this.

    But I'm having trouble downloading the drivers from the blob. I get

    Message: HttpDownloader: Caught WebException when getting HttpWebResponse: The remote server returned an error: (404) Not Found. Status: ProtocolError

    at Tvt.LocalRepositoryDatabase.LocalRepositoryDatabaseManager.GetDescrips(String shareName, String mtm, String os, String oslang, String agent, Boolean bValidateLocalRepository)
    Message: error occur while getting database xml from:\ HttpDownloaderReturnCode:NotFound

    1. Hi, are you able to view the database.xml if you go to the URL of your repository? Is your Storage Account a Blob storage or StorageV2?

  4. Hi Phil,

    Thanks for the quick reply.
    I was using a StorageV2 account switching to a v1 Blob storage works fine.

    1. Thanks for the update, good to hear it works for you.

  5. Hello...

    Testing this, and having the same issues as above.

    Storage account is blob, and i am able to view the database.xml in a browser.

    Container is public.

    What am i missing ??

    1. Are you getting the same "404 not found" message in your log?


Post a Comment