Downloads:

4,655

Downloads of v 0.3:

245

Last Update:

2/18/2018

Package Maintainer(s):

Software Author(s):

  • mica

Tags:

Chocolatey ChocolateyGUI Shortcuts PowerShell

Chocolatey Shortcuts (unofficial)

This is not the latest version of Chocolatey Shortcuts (unofficial) available.

0.3 | Updated: 2/18/2018

Downloads:

4,655

Downloads of v 0.3:

245

Maintainer(s):

Software Author(s):

  • mica

Chocolatey Shortcuts (unofficial) 0.3

This is not the latest version of Chocolatey Shortcuts (unofficial) available.

All Checks are Passing

2 Passing Test


Validation Testing Passed


Verification Testing Passed

Details

To install Chocolatey Shortcuts (unofficial), run the following command from the command line or from PowerShell:

>

To upgrade Chocolatey Shortcuts (unofficial), run the following command from the command line or from PowerShell:

>

To uninstall Chocolatey Shortcuts (unofficial), run the following command from the command line or from PowerShell:

>

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

1. Ensure you are set for organizational deployment

Please see the organizational deployment guide

  • 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://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. Enter your internal repository url

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

4. Choose your deployment method:


choco upgrade chocoshortcuts -y --source="'STEP 3 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 chocoshortcuts -y --source="'STEP 3 URL'" 
$exitCode = $LASTEXITCODE

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

Exit $exitCode

- name: Ensure chocoshortcuts installed
  win_chocolatey:
    name: chocoshortcuts
    state: present
    version: 0.3
    source: STEP 3 URL

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

Coming early 2020! Central Managment Reporting available now! More information...


chocolatey_package 'chocoshortcuts' do
  action    :install
  version  '0.3'
  source   'STEP 3 URL'
end

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


Chocolatey::Ensure-Package
(
    Name: chocoshortcuts,
    Version: 0.3,
    Source: STEP 3 URL
);

Requires Otter Chocolatey Extension. See docs at https://inedo.com/den/otter/chocolatey.


cChocoPackageInstaller chocoshortcuts
{
   Name     = 'chocoshortcuts'
   Ensure   = 'Present'
   Version  = '0.3'
   Source   = 'STEP 3 URL'
}

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


package { 'chocoshortcuts':
  provider => 'chocolatey',
  ensure   => '0.3',
  source   => 'STEP 3 URL',
}

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


salt '*' chocolatey.install chocoshortcuts version="0.3" source="STEP 3 URL"

See docs at https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html.

5. If applicable - Chocolatey configuration/installation

See infrastructure management matrix for Chocolatey configuration elements and examples.

This package was approved by moderator gep13 on 2/27/2018.

Description

Launch command line menus via file shortcuts for installing, updating, and uninstalling Chocolatey packages.

Generate shortcuts for each of your packages to a portable directory of your choice.

Screenshot

At installation, a "Chocolatey Shortcuts" folder is placed on your desktop. Rename or move it as you like (I keep mine synced between computers in Dropbox).

Create shortcuts for packages using "+Add Package Shortcuts". There you'll find options to generate shortcuts individually or in bulk, as well as a search function for finding package IDs.

Launching package shortcuts will present you with options to install (if not installed), update (if available), or uninstall packages. Update multiple packages at once using "+Check for Package Updates".


Tools\ChocolateyInstall.ps1
$dir = "$env:USERPROFILE\Desktop\Chocolatey Shortcuts"
Install-ChocolateyShortcut `
  -ShortcutFilePath "$dir\+Add Package Shortcuts.lnk" `
  -TargetPath 'CMD' `
  -Arguments "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"-NoProfile -ExecutionPolicy Unrestricted `"SL -PSPath `'`"`$Path`"`'; & `'`"%ChocolateyInstall%\lib\ChocoShortcuts\Tools\ChocoShortcuts.ps1`"`' 1`"\`"`"" `
  -IconLocation '%ProgramData%\chocolatey\choco.exe'
Install-ChocolateyShortcut `
  -ShortcutFilePath "$dir\+Check for Package Updates.lnk" `
  -TargetPath 'CMD' `
  -Arguments "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"-NoProfile -ExecutionPolicy Unrestricted `"SL -PSPath `'`"`$Path`"`'; & `'`"%ChocolateyInstall%\lib\ChocoShortcuts\Tools\ChocoShortcuts.ps1`"`' 2`"\`"`"" `
  -IconLocation '%ProgramData%\chocolatey\choco.exe'
Invoke-Item $dir
Tools\ChocolateyUninstall.ps1
$dir = "$env:USERPROFILE\Desktop\Chocolatey Shortcuts"
$lnk1 = "$dir\+Add Package Shortcuts.lnk"
$lnk2 = "$dir\+Check for Package Updates.lnk"
if (Test-Path $dir) {
    if ((((Get-ChildItem $dir).Length -le 2) -and (Test-Path $lnk1) -and (Test-Path $lnk2)) -or (Get-ChildItem $dir).Length -eq 0) {
        Remove-Item $dir -Recurse
    }
}
Tools\ChocoShortcuts.ps1
# Chocolatey Shortcuts v0.3
# https://github.com/mica/ChocoShortcuts/

param([Parameter(Position = 0)] [string]$App = $App, [string]$Opt)
$WDir = (Get-Location).Path
function Header {
    Write-Host '  ║' -ForegroundColor DarkGreen -NoNewline
    Write-Host ' Chocolatey Shortcuts' -ForegroundColor Green -NoNewline
    Write-Host ' ║' -ForegroundColor DarkGreen
    Write-Host '  ╙──────────────────────╜' -ForegroundColor DarkGreen
}
function y {
    Write-Host $Args -NoNewline -ForegroundColor Yellow
}
function w {
    Write-Host $Args -NoNewline
}
function Check {
    Clear-Host; Header
    if ($App -eq '') {
        'Launch this script via the shortcuts that were created on the desktop at installaion';''
        (w 'Enter ')+(y '1 ')+'to regenerate those shortcuts to a folder of your choice'
        (w 'Enter a ')+(y 'package ID ')+'to manage it sans shortcut'
        (w 'Or press ')+(y 'Enter ')+'to exit'
        $Entry = Read-Host "`n"
        if ($Entry -eq '') {
            Exit
        }
        elseif ($Entry -eq '1') {
            Add-Type -AssemblyName System.Windows.Forms
            $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{
                Description = "Choose an inital location for your shortcuts folder`nYou may move or rename it any time"
            }
            [void]$FolderBrowser.ShowDialog()
            $InstallDir = $FolderBrowser.SelectedPath
            if ($InstallDir -eq '') {
                Check
            }
            else {
                $WScriptShell = New-Object -ComObject WScript.Shell
                $Shortcut = $WScriptShell.CreateShortcut("$InstallDir\+Add Package Shortcuts.lnk")
                $Shortcut.TargetPath = 'CMD'
                $Shortcut.Arguments = "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"-NoProfile -ExecutionPolicy Unrestricted `"SL -PSPath `'`"`$Path`"`'; & `'`"%ChocolateyInstall%\lib\ChocoShortcuts\Tools\ChocoShortcuts.ps1`"`' 1`"\`"`""
                $Shortcut.IconLocation = '%ProgramData%\chocolatey\choco.exe'
                $Shortcut.Save()
                $Shortcut = $WScriptShell.CreateShortcut("$InstallDir\+Check for Package Updates.lnk")
                $Shortcut.TargetPath = 'CMD'
                $Shortcut.Arguments = "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"-NoProfile -ExecutionPolicy Unrestricted `"SL -PSPath `'`"`$Path`"`'; & `'`"%ChocolateyInstall%\lib\ChocoShortcuts\Tools\ChocoShortcuts.ps1`"`' 2`"\`"`""
                $Shortcut.IconLocation = '%ProgramData%\chocolatey\choco.exe'
                $Shortcut.Save()
                Clear-Host; Header
                "Shortcuts have been created in $InstallDir";''
                (w 'Enter ')+(y '1 ')+'to open the folder'
                (w 'Or press ')+(y 'Enter ')+'to exit'
                $Entry = Read-Host "`n"
                if ($Entry -eq '1') {
                    Invoke-Item $InstallDir
                    Exit
                }
                else {
                    Exit
                }
            }
        }
        else {
            $App = $Entry
            Check
        }
    }
    elseif ($App -eq '1') {
        AddNew
    }
    elseif ($App -eq '2') {
        UpdateCheck
    }
    "Checking Chocolatey.org for $App..."
    $Check = (choco upgrade $App --noop -r) -split '\|'
    if ($Check -join '' -match 'not found with') {
        Clear-Host; Header
        "$App was not found on Chocolatey.org"
        '  Either the repository is inaccessible' 
        '  Or your shortcut''s package ID is invalid';''
        (w 'Enter ')+(y '1 ')+"to check again for $App on Chocolatey.org"
        (w 'Enter ')+(y '2 ')+"to delete the $App shortcut and create a new one"
        (w 'Or press ')+(y 'Enter ')+'to exit'
        $Entry = Read-Host "`n"
        if ($Entry -eq '1') {
            Check
        }
        elseif ($Entry -eq '2') {
            Remove-Item ".\$App.lnk"
            Clear-Host; Header
            AddNew
        }
        else {
            Exit
        }
    }
    elseif ($Check -join '' -match 'would have'){
        $Avail = (choco list $App -e -r) -replace '^.*\|','v'
        Install
    }
    elseif ($Check[1] -eq $Check[2]) {
        $Curr = 'v' + $Check[1]
        UpToDate
    }
    elseif ($Check[1] -ne $Check[2]) {
        $Curr = 'v' + $Check[1]
        $Avail = 'v' + $Check[2]
        Update
    }
}
function Install {
    Clear-Host; Header
    "$App is not installed";''
    (w 'Enter ')+(y '1 ')+"to install $Avail"
    (w 'Enter ')+(y '2 ')+'to install with options'
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '1') {
        Clear-Host; Header
        Invoke-Expression "choco install $App $Opt -r -y";''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    elseif ($Entry -eq '2') {
        Clear-Host; Header
        "Your shortcut is configured to install using:"
        Write-Host "  choco install $App -y -r $Opt" -ForegroundColor Cyan;''
        (w 'Enter additional ')+(y 'options')+''
        (w 'Or press ')+(y 'Enter ')+'to cancel'
        $Entry = Read-Host "`n"
        if ($Entry -eq '') {
            Install
        }
        else {
            $ExtOpt = $Entry
            (w 'Enter ')+(y '1 ')+"to begin installation with: $ExtOpt"
            (w 'Or press ')+(y 'Enter ')+'to cancel'
            $Entry = Read-Host "`n"
            if ($Entry -eq '') {
                Install
            }
            elseif ($Entry -eq '1') {
                Clear-Host; Header
                Invoke-Expression "choco install $App $Opt $ExtOpt -r -y";''
                (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
                Exit
            }

        }

        
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        Install
    }
}
function UpToDate {
    Clear-Host; Header
    "$App $Curr is installed";''
    '  No updates are available';''
    (w 'Enter ')+(y '2 ')+"to uninstall $App"
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '2') {
        Clear-Host; Header
        choco uninstall $App -r -a -x -y;''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        UpToDate
    }
}
function Update {
    Clear-Host; Header
    "$App $Curr is installed";''
    "  The $Avail update is available";''
    (w 'Enter ')+(y '1 ')+'to install the update'
    (w 'Enter ')+(y '2 ')+"to uninstall $App"
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '1') {
        Clear-Host; Header
        choco upgrade $App -r -y;''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    elseif ($Entry -eq '2') {
        Clear-Host; Header
        choco uninstall $App -r -a -x -y;''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        Update
    }
}
function AddNew {
    'Create new shortcuts for installing, updating, or uninstalling packages';''
    (w 'Enter one or more comma separated ')+(y 'package ID')+(w ', optionally, w/ ')+(y 'options ')+'(excluding -y and -r)'
    (w 'Enter ')+(y '1 ')+'to search for package IDs on the Chocolatey.org repository'
    (w 'Enter ')+(y '2 ')+'to generate shortcuts for all currently installed packages'
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '1') {
        Search
    }
    elseif ($Entry -eq '2') {
        $Entry = (choco list -l -r | Where-Object {$_ -notmatch '.install'}) -replace '\|.*$' -join ','
        Generate
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        Generate
    }
}
function Generate {
    Clear-Host; Header
    ForEach ($Item in $Entry -split ',') {
        $Items = $Item.Split('',[System.StringSplitOptions]::RemoveEmptyEntries)
        $Package = $Items[0]
        $Params = " -Opt `'" + ($Items[1..$Items.Length] -join ' ' -replace "`'","`'`'") + "`'"
        $WScriptShell = New-Object -ComObject WScript.Shell
        $Shortcut = $WScriptShell.CreateShortcut("$WDir\$Package.lnk")
        $Shortcut.TargetPath = 'CMD'
        $Shortcut.Arguments = "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"-NoProfile -ExecutionPolicy Unrestricted `"SL -PSPath `'`"`$Path`"`'; & `'`"%ChocolateyInstall%\lib\ChocoShortcuts\Tools\ChocoShortcuts.ps1`"`' $Package $Params`"\`"`""
        $Shortcut.IconLocation = '%ProgramData%\chocolatey\choco.exe'
        $Shortcut.Save()
    }
    "Shortcuts have been created in $WDir";''
    (w 'Enter ')+(y '1 ')+'to open the folder'
    (w 'Enter ')+(y '2 ')+'to create another shortcut'
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '1') {
        Invoke-Item $WDir
        Clear-Host; Header
        AddNew
    }
    elseif ($Entry -eq '2') {
        Clear-Host; Header
        AddNew
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        Clear-Host; Header
        AddNew
    }
}
function Search {
    Clear-Host; Header
    (w 'Enter your ')+(y 'search terms')+''
    (w 'Or press ')+(y 'Enter ')+'to cancel';''
    $Search = Read-Host
    if ($Search -eq '') {
        Clear-Host; Header
        AddNew
    }
    else {
        Clear-Host; Header
        "Searching for ""$Search"""       
        $Results = choco list $Search -r
        if ($Results -eq $null) {
            Clear-Host; Header
            "No results for ""$Search"""
            (w 'Press ')+(y 'Enter ')+'to cancel'; Read-Host
            Search
        }
        else {
            Clear-Host; Header
            "Search results for ""$Search"":";''
            $Results -replace '\|',' (v' -replace '$',')';'' 
            AddNew
        }
    }
}
function UpdateCheck {
    Clear-Host; Header
    'Checking Chocolatey.org for updates...'
    $Outdated = choco outdated -r | Where-Object {$_ -notmatch '.install'}
    if ($Outdated -eq $null) {
        Clear-Host; Header
        'No updates are available';''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    else {
        $Updates = ForEach ($Package in $Outdated[0..($Outdated.Length)]) {
            $Package -replace '\|(\d*\.)*\d*\|',' v' -replace '\|\D*$'
        }
        if ($Updates -isnot [system.array]) {
            Clear-Host; Header
            'An update is available:';''
            "  $Updates";''
            (w 'Enter ')+(y '1 ')+'to install the update'
            (w 'Or press ')+(y 'Enter ')+'to exit'
            $Entry = Read-Host "`n"
            if ($Entry -eq '1') {
                Clear-Host; Header                
                choco upgrade ($Updates -replace ' v.*$') -r -y;''
                (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
                Exit
            }
            else {
                Exit
            } 
        }
        else {
            UpdateAll
        }
    }
}
function UpdateAll {
    Clear-Host; Header
    'The following updates are available:';''
    $Updates;''
    (w 'Enter ')+(y '1 ')+'to install all updates'
    (w 'Enter ')+(y '2 ')+'to select updates to install'
    (w 'Or press ')+(y 'Enter ')+'to exit'
    $Entry = Read-Host "`n"
    if ($Entry -eq '1') {
        Clear-Host; Header
        'Installing:'
        $Updates;''
        ForEach ($Package in $Updates) {
            choco upgrade ($Package -replace ' v.*$') -r -y
        }
        '';'Installation complete';''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    elseif ($Entry -eq '2') {
        UpdateSelect
    }
    elseif ($Entry -eq '') {
        Exit
    }
    else {
        UpdateAll
    }
}
function UpdateSelect {
    Clear-Host; Header
    'Enter the comma separated numbers of one or more updates to install:';''
    ForEach ($Package in $Updates) {
        $Selector++
        (w ' ')+(y $Selector)+". $Package"
    }
    '';(w 'Or press ')+(y 'Enter ')+'to cancel'
    $Entry = Read-Host "`n"
    if ($Entry -eq '') {
        $Selector = 0
        UpdateAll
    }
    elseif ($Entry -notmatch '[^\d\s,]') {
        $Number = ForEach ($Selector in ($Entry -split ',' -replace '\s')) {
            $Selector - 1 -as [int]
        }
        Clear-Host; Header
        'Installing:'
        $Updates[$Number];''
        ForEach ($Package in ($Updates[$Number] -replace ' v\d.*$')) {
            choco upgrade $Package -r -y
        }
        '';'Installation complete';''
        (w 'Press ')+(y 'Enter ')+'to exit'; Read-Host
        Exit
    }
    else {
        $Selector = 0
        UpdateSelect
    }
}
Check

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.

Version Downloads Last Updated Status
Chocolatey Shortcuts (unofficial) 0.4 446 Wednesday, March 7, 2018 Approved
Chocolatey Shortcuts (unofficial) 0.3 245 Sunday, February 18, 2018 Approved
Chocolatey Shortcuts (unofficial) 0.2 990 Tuesday, February 14, 2017 Approved
Chocolatey Shortcuts (unofficial) 0.1 365 Thursday, June 30, 2016 Approved

  • Fixed the bulk update function, which had been giving only a partal list of outdated packages since Chocolatey v0.10.5
  • Added uninstall script for removing the initial two shortcuts if the folder is otherwise empty

This package has no dependencies.

Discussion for the Chocolatey Shortcuts (unofficial) Package

Ground Rules:

  • This discussion is only about Chocolatey Shortcuts (unofficial) and the Chocolatey Shortcuts (unofficial) 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 Shortcuts (unofficial), 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