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

  • Retrieve the latest version of an application to compare 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 with 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
  • Validating or auditing a desktop image to ensure the current version of an application is installed
  • 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

Evergreen’s focus is on integration with PowerShell as a simple solution to provide application version numbers and download URLs. This has many use cases, including:

  • Integration with Azure DevOps or Packer to create evergreen machine images on-premises, in Azure, AWS, or other cloud platforms
  • Import applications into Microsoft Endpoint Manager – keep the Microsoft Deployment Toolkit, Configuration Manager or Microsoft Intune up to date with the latest versions of applications
  • Validating or auditing a desktop image to ensure the current version of an application is installed
  • Audit installed application versions in an image or a Windows desktop
  • 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
  • Track application updates to stay on top of new releases
  • 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

Several communities and commercial solutions already manage application deployment and updates. This module does not want to compete against those, and Evergreen is undoubtedly not a fully featured package manager for Windows.

Evergreen uses an approach that returns at least the version number. It downloads URI for applications programmatically – thus, for each run, an Evergreen function should return the latest version and download link.

Evergreen uses several strategies to return the latest version of software:

  • 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
  • Repository APIs – repo hosts including GitHub and SourceForge have APIs that can be queried to return application version and download links – e.g., Audacity, Notepad++ or WinMerge
  • Web page queries – often a vendor download pages will include a query that returns JSON 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., Adobe Acrobat Reader DC
  • Static URLs – some vendors provide static or evergreen URLs to their application installers. These URLs often provide additional information in the URL that can be used to determine the application version and can be resolved to the actual target URL – e.g., Microsoft FSLogix Apps or Zoom

What Evergreen Does Not Do

Evergreen does not scrape HTML – scraping web pages to parse text and determine version strings and download URLs can be problematic when text changes or the page is outdated. While the use of RegEx to determine application properties (particularly version numbers) is used for some applications, this approach is not preferred, if possible.

Pull requests to the Evergreen project that use web page scraping will be closed. For additional applications where the only recourse is to use web page scraping, see the Nevergreen project (GitHub).

Evergreen does not query non-vendor sources – the intention is to use the same update mechanisms that an application uses to find an update. However, where this is not possible, Evergreen may use data sources (i.e., JSON or XML) used by a vendor’s download web page (e.g., AdobeAcrobatReaderDC) or another vendor-maintained source (e.g., an official GitHub repository).

Evergreen can be complementary to 3rd party solutions or used to create a Windows Package Manager manifest.

Blog Banner Aaron Parker