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 list
command:
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-iso
invoke-uplift resource list ms-win2016-lcu
invoke-uplift resource list ms-win2016-ssuinvoke-uplift resource list ms-sql-serverinvoke-uplift resource list ms-visualstudio-
There more tools available, such as HashiCorp’s Vagrant and Packer, ReSharper, and more — just play around.
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
command:
# 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 download ms-sharepoint2016-rtm# wildcard, get all SharePoint 2016 updates of year 2018
invoke-uplift resource download ms-sharepoint2016-update-2018
By default, invoke-uplift
downloads files into uplift-local-repository
folder within the directory where it was run. This can be changed by using -r
or -repository
option:
# 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:
# -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
By default, invoke-uplift
reports only important information. Debug trace can be enabled with -d
or -debug
flag:
# -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
Finally, 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.
Moreover, the /latest
folder always contains two more files:
- __metadata.uplift.json
- {filename}.sha265
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.
Nowadays, 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
Further reading
There are a few more features which we’ll cover later, but here are a few more links to follow up:
- invoke-uplift module @ GitHub
- Usage of this module in Packer images
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.