Easy installation media download for busy SharePoint engineers
Downloading and managing installation media is not fun. Whether it is development, test or lab environment, dozens of ISO images, patches, updates and language packs have to be downloaded prior to setting up you SharePoint, SQL or even bare Windows setup. Sometimes, it might be up to fifty files to move around!
We have had this problem too, and developed a PowerShell module which downloads over 120 installation files for Windows, SharePoint, SQL, CRM Servers for you. It comes with a command line interface, JSON driven configurations, built-in checksum validation and a few more nice features. Being written in PowerShell 6, it works on Windows and MacOS platforms. Altogether, it provides an enjoyable experience and takes away the complexity of downloading and organising installation media for your SharePoint and Windows environments. Here is how it looks like:
Introducing InvokeUplift module
Getting started is super-easy. Just grab the latest InvokeUplift module from the PowerShell gallery. Note that
pwsh should be used all the time as this is a PowerShell 6 module.
pwsh Install-Module -Name InvokeUplift
Once done, validate install by running the following:
# don't forget to switch to pwsh pwsh # default run, version and help invoke-uplift invoke-uplift version invoke-uplift help
Listing installation medial
InvokeUplift knows more than 120 installation media files. It covers Windows 2016 ISO, patches, SQL Server ISO images and updates, SharePoint 2013 and 2016 trial ISOs, services packs and more. You can list available files using
invoke-uplift resource list
It also supports wildcard matching, so you can list only SharePoint relates resource as follows:
invoke-uplift resource list ms-sharepoint2016 invoke-uplift resource list ms-sharepoint2016-lang-pack invoke-uplift resource list ms-sharepoint2016-update
Similar for Windows 2016, SQL Server, and Visual Studio:
invoke-uplift resource list
ms-win-2016-isoinvoke-uplift resource list ms-win2016-lcu invoke-uplift resource list ms-win2016-ssuinvoke-uplift resource list
ms-sql-serverinvoke-uplift resource list
Downloading installation media
Now that we know the names of the file resources, it is super-easy to download them. Just use the resource name or wildcard with the
# download windows 2016 iso invoke-uplift resource download ms-win-2016-iso-x64-eval
# download SQL Server 2016 RTM invoke-uplift resource download ms-sql-server2016-rtm
# download SharePoint 2016 RTM ISO invoke-uplift resource downloadms-sharepoint2016-rtm
# wildcard, get all SharePoint 2016 updates of year 2018 invoke-uplift resource downloadms-sharepoint2016-update-2018
invoke-uplift downloads files into
uplift-local-repository folder within the directory where it was run. This can be changed by using
# download resource into a local folder invoke-uplift resource download 7z-1805-x64 -r c:/my-files-repository # download resources into a local folder invoke-uplift resource download 7z-1805-x64 -repository c:/my-files-repository
More options — force downloading, debug and links validation
By default, files are downloaded with checksum verification. Assuming that the first download was successful, consequent downloading won’t download anything. That makes the downloading experience not only fast but also predictable — files are downloaded rightly, without being dropped in the middle.
That said, sometimes we need to re-download files overriding existing ones. It can be done with
# -f or -force flag usage invoke-uplift resource download 7z-1805-x64 -r c:/my-files-repository -f invoke-uplift resource download 7z-1805-x64 -repository c:/my-files-repository -force
invoke-uplift reports only important information. Debug trace can be enabled with
# -d or -debug flag usage invoke-uplift resource download 7z-1805-x64 -r c:/my-files-repository -f invoke-uplift resource download 7z-1805-x64 -repository c:/my-files-repository -force
resource validate-uri command comes handy while ensuring that remote URLs are still alive. A simple HEAD request will be run against remote URL expecting 200 response. Same resource name or wild card value should be passed into the command:
# -d or -debug flag usage invoke-uplift resource validate-uri 7z-1805-x64 invoke-uplift resource validate-uri 7z-
Local repository structure
invoke-uplift uses a naming convention while organising downloaded files. Local file repository always looks as follows:
/resource-name /cache /download-staging /latest
Initially, file is downloaded into
/download-staging folder. If checksum passes, then the file is moved into
/latest folder. Such stages download workflow prevents incorrectly downloaded files overwriting, corrupting current “latest”. Only checksum validated files make it forward.
/latest folder always contains two more files:
These files provide a machine-readable input so that external tools can consume and validated downloaded files.
As you can see, while
invoke-uplift does not solve all the problems, it surely solves one problem nicely.
What do we use it for?
Initially, we struggled with file downloading while building golden images for our development and integration environments. Downloading and managing installation media was a manual, boring and error-prone process.
invoke-uplift is an important part of several other projects — Packer images and Vagrant boxes for SharePoint engineers. Every single bit is under CI/CD pipeline, complexity is covered and exposed via single line command, we almost forgot how to download things via browser, and so should you! Moreover,
invoke-uplift works under MacOS streamlining Windows/Macbook experience.
What else can you do?
Once you built up your local file repository, here are a few things you can do:
- Easy expose via shared folders, nodejs http-server , or any web server
- Sync with Azure/Amazon Cloud storage
- Build a CI/CD pipeline to pre-build your Azure/Amazon Cloud storage
- Run local http-server and easily share files with Packer/Vagrant builds
There are a few more features which we’ll cover later, but here are a few more links to follow up:
If you find this useful, drop us a line or give feedback on the GitHub. We always keen to learn more and improve on the feedback.