These instructions will help you get started with using Evergreen in software deployments and image creation.

Evergreen is a PowerShell module that returns the latest version and download URLs for a set of common Windows applications. The module consists of simple functions to use in scripts when performing several tasks including:

  • Retrieve the latest version of a particular application to comparing against a version already installed or downloaded
  • Return the URL for the latest version of the application to download it for local installation or deployment to target machines

Evergreen is intended for use in solutions used to automate software deployments. These solutions could be:

  • Image creation with Hashicorp Packer - images can be created with the latest version of a set of applications
  • Import applications into Microsoft Endpoint Manager - keep Configuration Manager or Microsoft Intune up to date with the latest versions of applications
  • Create a library of application installers - by regularly running Evergreen functions, you can retrieve and download the current version of an application and store it in an application directory structure for later use
  • Submitting manifests to Winget or Chocolatey or similar - Evergreen can return an object with a version number and download URL that can be used to construct manifests for the most recent versions

Primary functions in Evergreen are:

  • Get-EvergreenApp - returns details of the latest release of an application including the version number and download URL
  • Save-EvergreenApp - simplifies downloading application URLs returned from Get-EvergreenApp
  • Find-EvergreenApp - lists applications supported by the module

Why

There are several community and commercial products that manage application deployment and updates already. This module isn’t intended to compete against those. In fact, they can be complementary - for example, Evergreen can be used with the Chocolatey Automatic Package Updater Module to find the latest version of an application and then creating and submitting a Chocolatey package, or it can be used to create a Windows Package Manager manifest (see a sample script here: New-WinGetManifest.ps1).

Evergreen’s focus is on integration for PowerShell scripts to provide product version numbers and download URLs. Ideal for use with the Microsoft Deployment Toolkit or Microsoft Endpoint Configuration Manager for operating system deployment, creating applications packages in Microsoft Intune, or with Packer to create evergreen machine images on-premises, in Azure, AWS, or other cloud platforms

How

Wherever possible, Evergreen uses an approach that returns at least the version number and download URI for applications programmatically - thus for each run an Evergreen function it should return the latest version and download link.

Scraping web pages to parse text and determine version strings and download URLs can be problematic when text in the page changes or the page is out of date. Evergreen instead uses approaches that should be less prone to failure by querying an API wherever possible. Evergreen uses several strategies to return the latest version of software:

  1. Application update APIs - by using the same approach as the application itself, Evergreen can consistently return the latest version number and download URI - e.g. Microsoft Edge, Mozilla Firefox or Microsoft OneDrive. Fiddler can often be used to find where an application queries for updates
  2. Repository APIs - repo hosters including GitHub and SourceForge have APIs that can be queried to return application version and download links - e.g. Atom, Notepad++ or WinMerge
  3. Web page queries - often a vendor download pages will include a query when listing versions and download links - this avoids page scraping. Evergreen can mimic this approach to return application download URLs; however, this approach is likely to fail if the vendor changes how their pages work - e.g. Microsoft FSLogix Apps or Zoom

PowerShell Support

Evergreen supports Windows PowerShell 5.1 and PowerShell 7.0+. Evergreen should work on PowerShell Core 6.x; however, we are not actively testing on that version of PowerShell, so support cannot be guaranteed.