Unpacking Software Livestream

Join our monthly Unpacking Software livestream to hear about the latest news, chat and opinion on packaging, software deployment and lifecycle management!

Learn More

Chocolatey Product Spotlight

Join the Chocolatey Team on our regular monthly stream where we put a spotlight on the most recent Chocolatey product releases. You'll have a chance to have your questions answered in a live Ask Me Anything format.

Learn More

Chocolatey Coding Livestream

Join us for the Chocolatey Coding Livestream, where members of our team dive into the heart of open source development by coding live on various Chocolatey projects. Tune in to witness real-time coding, ask questions, and gain insights into the world of package management. Don't miss this opportunity to engage with our team and contribute to the future of Chocolatey!

Learn More

Calling All Chocolatiers! Whipping Up Windows Automation with Chocolatey Central Management

Webinar from
Wednesday, 17 January 2024

We are delighted to announce the release of Chocolatey Central Management v0.12.0, featuring seamless Deployment Plan creation, time-saving duplications, insightful Group Details, an upgraded Dashboard, bug fixes, user interface polishing, and refined documentation. As an added bonus we'll have members of our Solutions Engineering team on-hand to dive into some interesting ways you can leverage the new features available!

Watch On-Demand
Chocolatey Community Coffee Break

Join the Chocolatey Team as we discuss all things Community, what we do, how you can get involved and answer your Chocolatey questions.

Watch The Replays
Chocolatey and Intune Overview

Webinar Replay from
Wednesday, 30 March 2022

At Chocolatey Software we strive for simple, and teaching others. Let us teach you just how simple it could be to keep your 3rd party applications updated across your devices, all with Intune!

Watch On-Demand
Chocolatey For Business. In Azure. In One Click.

Livestream from
Thursday, 9 June 2022

Join James and Josh to show you how you can get the Chocolatey For Business recommended infrastructure and workflow, created, in Azure, in around 20 minutes.

Watch On-Demand
The Future of Chocolatey CLI

Livestream from
Thursday, 04 August 2022

Join Paul and Gary to hear more about the plans for the Chocolatey CLI in the not so distant future. We'll talk about some cool new features, long term asks from Customers and Community and how you can get involved!

Watch On-Demand
Hacktoberfest Tuesdays 2022

Livestreams from
October 2022

For Hacktoberfest, Chocolatey ran a livestream every Tuesday! Re-watch Cory, James, Gary, and Rain as they share knowledge on how to contribute to open-source projects such as Chocolatey CLI.

Watch On-Demand

Downloads:

27,210,953

Downloads of v 1.0.0:

27,210,953

Last Update:

07 Apr 2022

Package Maintainer(s):

Software Author(s):

  • chocolatey-community

Tags:

chocolatey-compatibility compatibility extension

Chocolatey Compatibility Extension

  • 1
  • 2
  • 3

1.0.0 | Updated: 07 Apr 2022

Downloads:

27,210,953

Downloads of v 1.0.0:

27,210,953

Maintainer(s):

Software Author(s):

  • chocolatey-community

Chocolatey Compatibility Extension 1.0.0

  • 1
  • 2
  • 3

All Checks are Passing

3 Passing Tests


Validation Testing Passed


Verification Testing Passed

Details

Scan Testing Successful:

No detections found in any package files

Details
Learn More

Deployment Method: Individual Install, Upgrade, & Uninstall

To install Chocolatey Compatibility Extension, run the following command from the command line or from PowerShell:

>

To upgrade Chocolatey Compatibility Extension, run the following command from the command line or from PowerShell:

>

To uninstall Chocolatey Compatibility Extension, run the following command from the command line or from PowerShell:

>

Deployment Method:

NOTE

This applies to both open source and commercial editions of Chocolatey.

1. Enter Your Internal Repository Url

(this should look similar to https://community.chocolatey.org/api/v2/)


2. Setup Your Environment

1. Ensure you are set for organizational deployment

Please see the organizational deployment guide

2. Get the package into your environment

  • Open Source or Commercial:
    • Proxy Repository - Create a proxy nuget repository on Nexus, Artifactory Pro, or a proxy Chocolatey repository on ProGet. Point your upstream to https://community.chocolatey.org/api/v2/. Packages cache on first access automatically. Make sure your choco clients are using your proxy repository as a source and NOT the default community repository. See source command for more information.
    • You can also just download the package and push it to a repository Download

3. Copy Your Script

choco upgrade chocolatey-compatibility.extension -y --source="'INTERNAL REPO URL'" [other options]

See options you can pass to upgrade.

See best practices for scripting.

Add this to a PowerShell script or use a Batch script with tools and in places where you are calling directly to Chocolatey. If you are integrating, keep in mind enhanced exit codes.

If you do use a PowerShell script, use the following to ensure bad exit codes are shown as failures:


choco upgrade chocolatey-compatibility.extension -y --source="'INTERNAL REPO URL'" 
$exitCode = $LASTEXITCODE

Write-Verbose "Exit code was $exitCode"
$validExitCodes = @(0, 1605, 1614, 1641, 3010)
if ($validExitCodes -contains $exitCode) {
  Exit 0
}

Exit $exitCode

- name: Install chocolatey-compatibility.extension
  win_chocolatey:
    name: chocolatey-compatibility.extension
    version: '1.0.0'
    source: INTERNAL REPO URL
    state: present

See docs at https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html.


chocolatey_package 'chocolatey-compatibility.extension' do
  action    :install
  source   'INTERNAL REPO URL'
  version  '1.0.0'
end

See docs at https://docs.chef.io/resource_chocolatey_package.html.


cChocoPackageInstaller chocolatey-compatibility.extension
{
    Name     = "chocolatey-compatibility.extension"
    Version  = "1.0.0"
    Source   = "INTERNAL REPO URL"
}

Requires cChoco DSC Resource. See docs at https://github.com/chocolatey/cChoco.


package { 'chocolatey-compatibility.extension':
  ensure   => '1.0.0',
  provider => 'chocolatey',
  source   => 'INTERNAL REPO URL',
}

Requires Puppet Chocolatey Provider module. See docs at https://forge.puppet.com/puppetlabs/chocolatey.


4. If applicable - Chocolatey configuration/installation

See infrastructure management matrix for Chocolatey configuration elements and examples.

Package Approved

This package was approved by moderator Pauby on 15 Jun 2024.

Description

This package provides helper functions that re-introduces helpers that were removed or updated
in Chocolatey, as well as helpers that are not available in older version of Chocolatey CLI.
The purpose of the package is to allow older packages to keep functioning even on later versions
of Chocolatey CLI where certain helpers have been removed.

The helpers included in this package may not have any logic to handle the functionality to keep
existing, but rather to ensure that packages using the helpers do not stop working.

WARNING: Do NOT use helpers located in this package for removed functionality, unless absolutely necessary!


extensions\chocolatey-compatibility.psm1
# Export functions that start with capital letter, and located in helpers directory.
# Other files are considered private, and should not be imported.
$ScriptRoot = Split-Path $MyInvocation.MyCommand.Definition

# The functions available in Chocolatey is not available in a variable
# we need to skip the import of a function if it already exist, as such
# we need to check the file system directly.
$ChocolateyScriptPath = Resolve-Path "$env:ChocolateyInstall\helpers\functions"

$existingMembers = Get-ChildItem $ChocolateyScriptPath | ForEach-Object BaseName

Get-ChildItem "$ScriptRoot\helpers\*.ps1" | `
  Where-Object { $_.Name -cmatch "^[A-Z]+" } | `
  ForEach-Object {
  $name = $_.BaseName

  if ($existingMembers -notcontains $name) {
    Write-Debug "Exporting function '$name' for backwards compatibility"
    . $_
    Export-ModuleMember -Function $name
  }
  else {
    Write-Debug "Function '$name' exists, ignoring export."
  }
}
extensions\helpers\Get-PackageParameters.ps1
<#
.SYNOPSIS
    Parses parameters of the package

.EXAMPLE
    Get-PackageParameters "/Shortcut /InstallDir:'c:\program files\xyz' /NoStartup" | set r
    if ($r.Shortcut) {... }
    Write-Host $r.InstallDir

.OUTPUTS
    [HashTable]
#>
function Get-PackageParameters {
    [CmdletBinding()]
    param(
       [string] $Parameters = $Env:ChocolateyPackageParameters,
       # Allows splatting with arguments that do not apply and future expansion. Do not use directly.
       [parameter(ValueFromRemainingArguments = $true)]
       [Object[]] $IgnoredArguments
    )

    $res = @{}

    $re = "\/([a-zA-Z0-9]+)(:[`"'].+?[`"']|[^ ]+)?"
    $results = $Parameters | Select-String $re -AllMatches | Select-Object -Expand Matches
    foreach ($m in $results) {
        if (!$m) { continue } # must because of posh 2.0 bug: https://github.com/chocolatey/chocolatey-coreteampackages/issues/465

        $a = $m.Value -split ':'
        $opt = $a[0].Substring(1); $val = $a[1..100] -join ':'
        if ($val -match '^(".+")|(''.+'')$') {$val = $val -replace '^.|.$'}
        $res[ $opt ] = if ($val) { $val } else { $true }
    }
    $res
}
extensions\helpers\Get-UninstallRegistryKey.ps1
<#
.SYNOPSIS
    Retrieve registry key(s) for system-installed applications from an exact or wildcard search.

.DESCRIPTION
    This function will attempt to retrieve a matching registry key for an already installed application,
    usually to be used with a chocolateyUninstall.ps1 automation script.

    The function also prevents `Get-ItemProperty` from failing when handling wrongly encoded registry keys.

.PARAMETER SoftwareName
    Part or all of the Display Name as you see it in Programs and Features.
    It should be enough to be unique.
    The syntax follows the rules of the PowerShell `-like` operator, so the `*` character is interpreted
    as a wildcard, which matches any (zero or more) characters.

    If the display name contains a version number, such as "Launchy (2.5)", it is recommended you use a
    fuzzy search `"Launchy (*)"` (the wildcard `*`) so if Launchy auto-updates or is updated outside
    of chocolatey, the uninstall script will not fail.

    Take care not to abuse fuzzy/glob pattern searches. Be conscious of programs that may have shared
    or common root words to prevent overmatching. For example, "SketchUp*" would match two keys with software
    names "SketchUp 2016" and "SketchUp Viewer" that are different programs released by the same company.

.PARAMETER IgnoredArguments
    Allows splatting with arguments that do not apply and future expansion. Do not use directly.

.INPUTS
    System.String

.OUTPUTS
    PSCustomObject

.EXAMPLE
    [array]$key = Get-UninstallRegistryKey -SoftwareName "VLC media player"
    $key.UninstallString

    Exact match: software name in Programs and Features is "VLC media player"

.EXAMPLE
    [array]$key = Get-UninstallRegistryKey -SoftwareName "Gpg4win (*)"
    $key.UninstallString

    Version match: software name is "Gpg4Win (2.3.0)"

.EXAMPLE
    [array]$key = Get-UninstallRegistryKey -SoftwareName "SketchUp [0-9]*"
    $key.UninstallString

    Version match: software name is "SketchUp 2016"
    Note that the similar software name "SketchUp Viewer" would not be matched.

.LINK
    Uninstall-ChocolateyPackage
#>
function Get-UninstallRegistryKey {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
    [ValidateNotNullOrEmpty()]
    [string] $SoftwareName,
    [parameter(ValueFromRemainingArguments = $true)]
    [Object[]] $IgnoredArguments
  )
  Write-Debug "Running 'Get-UninstallRegistryKey' for `'$env:ChocolateyPackageName`' with SoftwareName:`'$SoftwareName`'";

  $ErrorActionPreference = 'Stop'
  $local_key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
  $machine_key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
  $machine_key6432 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'

  Write-Verbose "Retrieving all uninstall registry keys"
  [array]$keys = Get-ChildItem -Path @($machine_key6432, $machine_key, $local_key) -ea 0
  Write-Debug "Registry uninstall keys on system: $($keys.Count)"

  Write-Debug "Error handling check: `'Get-ItemProperty`' fails if a registry key is encoded incorrectly."
  [int]$maxAttempts = $keys.Count
  for ([int]$attempt = 1; $attempt -le $maxAttempts; $attempt++) {
    $success = $false

    $keyPaths = $keys | Select-Object -ExpandProperty PSPath
    try {
      [array]$foundKey = Get-ItemProperty -Path $keyPaths -ea 0 | Where-Object { $_.DisplayName -like $SoftwareName }
      $success = $true
    }
    catch {
      Write-Debug "Found bad key."
      foreach ($key in $keys) { try { Get-ItemProperty $key.PsPath > $null } catch { $badKey = $key.PsPath } }
      Write-Verbose "Skipping bad key: $badKey"
      [array]$keys = $keys | Where-Object { $badKey -NotContains $_.PsPath }
    }

    if ($success) { break; }
    if ($attempt -eq 10) {
      Write-Warning "Found more than 10 bad registry keys. Run command again with `'--verbose --debug`' for more info."
      Write-Debug "Each key searched should correspond to an installed program. It is very unlikely to have more than a few programs with incorrectly encoded keys, if any at all. This may be indicative of one or more corrupted registry branches."
    }
  }

  Write-Debug "Found $($foundKey.Count) uninstall registry key(s) with SoftwareName:`'$SoftwareName`'";
  return $foundKey
}
extensions\helpers\Install-ChocolateyDesktopLink.ps1
extensions\helpers\Write-ChocolateyFailure.ps1
# Copyright © 2017 - 2021 Chocolatey Software, Inc.
# Copyright © 2015 - 2017 RealDimensions Software, LLC
# Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

function Write-ChocolateyFailure {
  <#
  .SYNOPSIS
  DEPRECATED - DO NOT USE. This function was removed in Chocolatey v1.

  .DESCRIPTION
  Throws the error message as an error.

  .NOTES
  This has been deprecated and was no longer useful as of 0.9.9,
  in 1.0.0 this function was removed entirely from Chocolatey CLI. Instead
  please just use `throw $_.Exception` when catching errors. Although
  try/catch is no longer necessary unless you want to do some error
  handling.
  As the recommendation is to no longer use this function, no updates
  will be accepted to fix any problems.

  .INPUTS
  None

  .OUTPUTS
  None

  .PARAMETER PackageName
  The name of the package - while this is an arbitrary value, it's
  recommended that it matches the package id.

  .PARAMETER FailureMessage
  The message to throw an error with.

  .PARAMETER IgnoredArguments
  Allows splatting with arguments that do not apply. Do not use directly.

  .LINK
  Write-ChocolateySuccess
  #>
  param(
    [string] $packageName,
    [string] $failureMessage,
    [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments
  )

  Write-FunctionCallLogMessage -Invocation $MyInvocation -Parameters $PSBoundParameters
  Write-Warning "Write-ChocolateyFailure was removed in Chocolatey CLI v1. If you are the package maintainer, please use 'throw `$_.Exception' instead."
  Write-Warning "If you are not the maintainer, please contact the maintainer to update the $packageName package."

  $error | ForEach-Object { $_.Exception | Format-List * | Out-String }

  throw "$failureMessage"
}
extensions\helpers\Write-ChocolateySuccess.ps1
# Copyright © 2017 - 2021 Chocolatey Software, Inc.
# Copyright © 2015 - 2017 RealDimensions Software, LLC
# Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

function Write-ChocolateySuccess {
  <#
  .SYNOPSIS
  DEPRECATED - DO NOT USE.

  .DESCRIPTION
  Writes a success message for a package.

  .NOTES
  This has been deprecated and is no longer useful as of 0.9.9. Instead
  please just use `throw $_.Exception` when catching errors. Although
  try/catch is no longer necessary unless you want to do some error
  handling.
  As the recommendation is to no longer use this function, no updates
  will be accepted to fix any problems.

  .INPUTS
  None

  .OUTPUTS
  None

  .PARAMETER PackageName
  The name of the package - while this is an arbitrary value, it's
  recommended that it matches the package id.

  .PARAMETER IgnoredArguments
  Allows splatting with arguments that do not apply. Do not use directly.

  .LINK
  Write-ChocolateyFailure
  #>
  param(
    [string] $packageName = $env:ChocolateyPackageName,
    [Parameter(ValueFromRemainingArguments = $true)]
    [object[]] $IgnoredArguments
  )

  Write-Warning "Write-ChocolateySuccess was removed in Chocolatey CLI v1, and have no functionality any more. If you are the maintainer, please remove it from from your package file."
  Write-Warning "If you are not the maintainer, please contact the maintainer to update the $packageName package."
}
extensions\helpers\Write-FileUpdateLog.ps1
# Copyright © 2017 - 2021 Chocolatey Software, Inc.
# Copyright © 2015 - 2017 RealDimensions Software, LLC
# Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

function Write-FileUpdateLog {
  <#
  .SYNOPSIS
  DEPRECATED - DO NOT USE. This function was removed in Chocolatey v1.

  .DESCRIPTION
  Original: Monitors a location and writes changes to a log file.
  Present: Will output a warning about the cmdlet should not be used.

  .NOTES
  DEPRECATED - Functionality was removed in Chocolatey v1.
  As the recommendation is to no longer use this function, no updates
  will be accepted to fix any problems.

  .PARAMETER IgnoredArguments
  Allows splatting with arguments that do not apply. Do not use directly.
  #>
  param(
    [Parameter(ValueFromRemainingArguments = $true)]
    [object[]] $IgnoredArguments
  )

  Write-Warning "Write-FileUpdateLog was removed in Chocolatey CLI v1, and have no functionality any more. If you are the maintainer, please remove it from from your package file."
  Write-Warning "If you are not the maintainer, please contact the maintainer to update the $env:ChocolateyPackageName package."
}

Log in or click on link to see number of positives.

In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).

Chocolatey Pro provides runtime protection from possible malware.

Add to Builder Version Downloads Last Updated Status

1.0.0

  • Add compatibility layer for removed function Install-ChocolateyDesktopLink
  • Add compatibility layer for removed function Write-ChocolateyFailure
  • Add compatibility layer for removed function Write-ChocolateySuccess
  • Add compatibility layer for removed function Write-FileUpdateLog
  • Add support for Get-PackageParameters.
  • Add support for Get-UninstallRegistryKey.

This package has no dependencies.

Discussion for the Chocolatey Compatibility Extension Package

Ground Rules:

  • This discussion is only about Chocolatey Compatibility Extension and the Chocolatey Compatibility Extension package. If you have feedback for Chocolatey, please contact the Google Group.
  • This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
  • The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
  • Tell us what you love about the package or Chocolatey Compatibility Extension, or tell us what needs improvement.
  • Share your experiences with the package, or extra configuration or gotchas that you've found.
  • If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.
comments powered by Disqus