Downloads:
931
Downloads of v 1.0.2:
730
Last Update:
15 Jan 2024
Package Maintainer(s):
Software Author(s):
- bcurran3
Tags:
bcurran3 unofficial ccu choco upgrade all cup(unofficial) Chocolatey Continuous Upgrader (CCU) (Script)
- 1
- 2
- 3
1.0.2 | Updated: 15 Jan 2024
Downloads:
931
Downloads of v 1.0.2:
730
Maintainer(s):
Software Author(s):
- bcurran3
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.2
Legal Disclaimer: Neither this package nor Chocolatey Software, Inc. are affiliated with or endorsed by bcurran3. The inclusion of bcurran3 trademark(s), if any, upon this webpage is solely to identify bcurran3 goods or services and not for commercial purposes.
- 1
- 2
- 3
All Checks are Passing
3 Passing Tests
Deployment Method: Individual Install, Upgrade, & Uninstall
To install (unofficial) Chocolatey Continuous Upgrader (CCU) (Script), run the following command from the command line or from PowerShell:
To upgrade (unofficial) Chocolatey Continuous Upgrader (CCU) (Script), run the following command from the command line or from PowerShell:
To uninstall (unofficial) Chocolatey Continuous Upgrader (CCU) (Script), run the following command from the command line or from PowerShell:
Deployment Method:
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
Option 1: Cached Package (Unreliable, Requires Internet - Same As Community)-
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
-
Open Source
-
Download the package:
Download - Follow manual internalization instructions
-
-
Package Internalizer (C4B)
-
Run: (additional options)
choco download choco-continuous-upgrader --internalize --source=https://community.chocolatey.org/api/v2/
-
For package and dependencies run:
choco push --source="'INTERNAL REPO URL'"
- Automate package internalization
-
Run: (additional options)
3. Copy Your Script
choco upgrade choco-continuous-upgrader -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 choco-continuous-upgrader -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 choco-continuous-upgrader
win_chocolatey:
name: choco-continuous-upgrader
version: '1.0.2'
source: INTERNAL REPO URL
state: present
See docs at https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html.
chocolatey_package 'choco-continuous-upgrader' do
action :install
source 'INTERNAL REPO URL'
version '1.0.2'
end
See docs at https://docs.chef.io/resource_chocolatey_package.html.
cChocoPackageInstaller choco-continuous-upgrader
{
Name = "choco-continuous-upgrader"
Version = "1.0.2"
Source = "INTERNAL REPO URL"
}
Requires cChoco DSC Resource. See docs at https://github.com/chocolatey/cChoco.
package { 'choco-continuous-upgrader':
ensure => '1.0.2',
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.
This package was approved by moderator Windos on 16 Jan 2024.
choco://choco-continuous-upgrader
To use choco:// protocol URLs, install (unofficial) choco:// Protocol support
Click here for secret GeekMode screenshot
This package is a pseudo replacement for choco-upgrade-all-at which is a pseudo replacement for choco-upgrade-all-at-startup. (Got that? There will be a pop quiz!) CCU is a result of my obsessive desire to keep my Chocolatey packages up-to-date.
DO YOU WANT TO UPGRADE YOUR CHOCOLATEY PACKAGES CONTINUOUSLY THROUGHOUT THE DAY?
YOU JUST FOUND THE EASIEST WAY!
HOW DOES IT WORK?
CCU starts a background PowerShell process which continuously checks FeedBurner for recently published Chocolatey packages. When locally installed packages are found in the feed, they are automatically upgraded.
CCU defaults to checking every 30 minutes, automatically upgrading packages, and no foreground notifications. These defaults are overridable and configurable; e.g. you could use CCU to just notify you of upgrades every hour without automatically installing them.
HIGHLY RECOMMENDED:
Install my choco-toast-notifications.hook to enable beautiful foreground toast notifications of package installs, upgrades, and uninstalls. If you plan to use CCU only for notifications of upgrades without having them automatically installed, I recommend using burnttoast-psmodule for those notifications.
USAGE INSTRUCTIONS:
CCU -Start will start CCU with defaults or your preferences if you created a config file.
CCU -Stop to stop CCU.
CCU -Status will display CCU's running options and packages that have been upgraded or waiting to be upgraded since last check.
CCU -Notify (assumes -Start) will send foreground notifications of upgrades using either BurntToast or MSG.
CCU -NoUpgrades (assumes -Start) will check for upgrades but not automatically install them.
CCU -UpgradeAll (assumes -Start) runs 'choco upgrade all -y' before continuously checking for upgrades.
CCU -CreateConfig to set your preferences.
CCU -CreateTask to set CCU to run on bootup.
CCU -Help for more info.
If you find choco-continuous-upgrader (CCU) useful, and I suspect you will, please consider donating: https://www.paypal.me/bcurran3donations or become a patron at https://www.patreon.com/bcurran3
#Requires -RunAsAdministrator
#$ErrorActionPreference = 'Stop'
# CCU.ps1 (Chocolatey Continuous Upgrader) Copyleft 2023 by Bill Curran AKA BCURRAN3
# LICENSE: GNU GPL v3 - https://www.gnu.org/licenses/gpl.html
# Open a GitHub issue at https://github.com/bcurran3/ChocolateyPackages/issues if you have suggestions for improvement.
param (
[Alias("?")][switch]$Help,
[switch]$Start,
[switch]$Stop,
[switch]$Status,
[Alias("Notifications")][switch]$Notify,
[Alias("DoNotUpgrade")][switch]$NoUpgrades,
[Alias("UpgradeAll")][switch]$UpgradeAllFirst,
[Alias("EditConfig")][switch]$CreateConfig,
[switch]$DeleteConfig,
[Alias("CreateTask")][switch]$CreateScheduledTask,
[Alias("DeleteTask")][switch]$DeleteScheduledTask,
[Alias("GeekMode")][switch]$Debug,
[int]$WaitTime
)
Write-Host "CCU.ps1 v1.0.2 (2024/01/14) - (unofficial) Chocolatey Continuous Upgrader" -Foreground White
Write-Host "Copyleft 2023 Bill Curran ([email protected]) - free for personal and commercial use`n" -Foreground White
if (!$env:ChocolateyToolsLocation) {$env:ChocolateyToolsLocation = "$ENV:SystemDrive\tools"}
$ErrorActionPreference = 'Stop'
$Background=$True
$CCUconfig="$env:chocolateyToolsLocation\BCURRAN3\CCU.config"
$RunningFile="$env:chocolateyToolsLocation\BCURRAN3\CCU-running.tmp"
$StatusFile="$env:chocolateyToolsLocation\BCURRAN3\CCU-status.tmp"
$execdir=(Split-Path -parent $MyInvocation.MyCommand.Definition)
function create_config {
Write-Host " ** Creating CCU config file:`n" -Foreground Magenta
if (Test-Path "$CCUconfig") {Remove-Item "$CCUconfig" -Force}
do {
$ConfigNotify=Read-Host " CCU notifications (True/False)? "
} until (($ConfigNotify -eq 'true') -or ($ConfigNotify -eq 'false'))
do {
$ConfigNoUpgrades=Read-Host " Disable CCU automatic upgrades (True/False)? "
} until (($ConfigNoUpgrades -eq 'true') -or ($ConfigNoUpgrades -eq 'false'))
do {
$ConfigUpgradeAllFirst=Read-Host " CCU upgrade all packages on run? (True/False)? "
} until (($ConfigUpgradeAllFirst -eq 'true') -or ($ConfigUpgradeAllFirst -eq 'false'))
do {
[int]$ConfigWaitTime=Read-Host " CCU wait time (# of minutes)? "
} until ($ConfigWaitTime -is [int])
$ConfigFile = New-Object System.XMl.XmlTextWriter("$CCUconfig", $Null)
$ConfigFile.Formatting = 'Indented'
$ConfigFile.Indentation = 1
$ConfigFile.IndentChar = "`t"
$ConfigFile.WriteStartDocument()
$ConfigFile.WriteStartElement("Preferences")
$ConfigFile.WriteElementString("Notify","$ConfigNotify")
$ConfigFile.WriteElementString("NoUpgrades","$ConfigNoUpgrades")
$ConfigFile.WriteElementString("UpgradeAllFirst","$ConfigUpgradeAllFirst")
$ConfigFile.WriteElementString("WaitTime","$ConfigWaitTime")
$ConfigFile.WriteEndDocument()
$ConfigFile.Flush()
$ConfigFile.Close()
Write-Host "`n ** Created $CCUconfig." -Foreground Magenta
if (Test-Path "$RunningFile") {
Write-Host " ** Restart CCU for defaults to take effect." -Foreground Yellow
}
Write-Host ""
}
function delete_config {
if (Test-Path "$CCUconfig") {
Remove-Item "$CCUconfig"
Write-Host " ** Deleted $CCUconfig`n" -Foreground Magenta
} else {
Write-Host " ** CCU config file not found.`n" -Foreground Yellow
}
}
function create_scheduledtask {
if (!(Test-Path "$CCUconfig")) {
Write-Host " ** CCU config file not found." -Foreground Yellow
Write-Host " ** CCU needs defaults to run as a scheduled task." -Foreground Yellow
Write-Host " ** Run `'CCU -CreateConfig`' to set defaults.`n" -Foreground Yellow
return
}
Write-Host " ** Creating CCU scheduled task.`n" -Foreground Magenta
$ErrorActionPreference = 'SilentlyContinue'
$GotTask = (&schtasks.exe /query /tn "CCU") 2> $null
$ErrorActionPreference = 'Stop'
if ($GotTask){
&schtasks.exe /DELETE /TN "CCU" /F
}
SchTasks /Create /SC ONSTART /RU $(whoami) /RP /RL HIGHEST /TN "CCU" /TR "%ChocolateyInstall%\bin\CCU.bat" /F
Write-Host "`n ** CCU will run at Windows startup.`n" -Foreground Yellow
}
function delete_scheduledtask {
$ErrorActionPreference = 'SilentlyContinue'
$GotTask = (&schtasks.exe /query /tn "CCU") 2> $null
$ErrorActionPreference = 'Stop'
if ($GotTask){
&schtasks.exe /DELETE /TN "CCU" /F
Write-Host "`n ** CCU scheduled task deleted.`n" -Foreground Magenta
} else {
Write-Host " ** No CCU scheduled task to delete.`n" -Foreground Yellow
}
}
function print_footer {
Write-Host "Found CCU.ps1 useful?" -ForegroundColor White
Write-Host "Buy me a beer at https://www.paypal.me/bcurran3donations" -ForegroundColor White
Write-Host "Become a patron at https://www.patreon.com/bcurran3" -ForegroundColor White
}
if (Test-Path "$RunningFile") {
$created=(Get-ChildItem "$RunningFile").LastWriteTime
$rebooted=(Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime).LastBootUpTime
if ($created -lt $rebooted) {
Write-Host " ** CCU detected a reboot while previously running." -Foreground Yellow
Write-Host " ** Deleting temp file.`n" -Foreground Magenta
Remove-Item $RunningFile
}
}
if ($CreateConfig) {create_config; return}
if ($DeleteConfig) {delete_config; return}
if ($CreateScheduledTask) {create_scheduledtask; return}
if ($DeleteScheduledTask) {delete_scheduledtask; return}
if (!$Start -and !$Stop -and !$Status -and !$Help -and !$Notify -and !$NoUpgrades -and !$Debug -and !$WaitTime) {
$MiniHelp=$True
if (Test-Path "$CCUconfig") {
[xml]$ConfigFile = Get-Content "$CCUconfig"
if ($ConfigFile.Preferences.Notify -eq 'true') {$Notify=$True}
if ($ConfigFile.Preferences.NoUpgrades -eq 'true') {$NoUpgrades=$True}
if ($ConfigFile.Preferences.UpgradeAllFirst -eq 'true') {$UpgradeAllFirst=$True}
if ($ConfigFile.Preferences.WaitTime) {$WaitTime=$ConfigFile.Preferences.WaitTime}
$Start=$True
$MiniHelp=$False
}
if (Test-Path "$RunningFile") {
$Start=$False
$Status=$True
$MiniHelp=$False
}
if ($MiniHelp) {
Write-Host " ** Please run 'CCU -?' or 'CCU -help' for help menu.`n" -Foreground White
return
}
}
if ($Debug) {$Start=$True; $Background=$False}
if ($Notify) {$env:Notify=$True; $Start=$True} else {$env:Notify=$False}
if ($NoUpgrades) {$env:AutoUpgrade=$False; $Start=$True} else {$env:AutoUpgrade=$True}
if ($UpgradeAllFirst) {$env:UpgradeAllFirst=$True} else {$env:UpgradeAllFirst=$False}
if ($WaitTime) {$Start=$True}; if (!$WaitTime) {$WaitTime="30"} ; $env:WaitTime=$WaitTime
if ($Stop) {$Help=$False; $Start=$False; $Status=$False}
if ( $Help ) {
Write-Host "OPTIONS AND SWITCHES:" -Foreground Magenta
Write-Host " -Start"
Write-Host " Start checking for and install upgrades."
Write-Host " -Stop"
Write-Host " Stop checking for upgrades."
Write-Host " -Status"
Write-Host " Show CCU status."
Write-Host " -Notify, -Notifications (assumes -Start)"
Write-Host " Send notifications when upgrades are found."
Write-Host " -NoUpgrades, -DoNotUpgrade (assumes -Start)"
Write-Host " Disable auto-upgrading of packages."
Write-Host " -UpgradeAll, -UpgradeAllFirst (assumes -Start)"
Write-Host " Run `'choco upgrade all -y`' before continuously checking for upgrades."
Write-Host " # (assumes -Start)"
Write-Host " Number of minutes to wait between checks for upgrades (default 30)."
Write-Host " -CreateConfig, -EditConfig"
Write-Host " Creates CCU config file with your preferences."
Write-Host " -DeleteConfig"
Write-Host " Deletes the CCU config file."
Write-Host " -CreateTask, -CreateScheduledTask"
Write-Host " Creates a scheduled task to run CCU on system boot."
Write-Host " -DeleteTask, -DeleteScheduledTask"
Write-Host " Deletes the scheduled task to run CCU on system boot."
Write-Host " -GeekMode, -Debug (assumes -Start)"
Write-Host " Just for fun."
Write-Host " -Help, -?"
Write-Host " This menu.`n"
return
}
if ($Status) {
if (Test-Path "$RunningFile") {
Write-Host " ** CCU is running." -Foreground Yellow
if (Test-Path "$StatusFile") {
foreach($line in Get-Content "$StatusFile") {
Write-Host "$line" -Foreground Yellow
}
} else {
Write-Host " ** ERROR: Status file not found. Run `'CCU -Status`' again." -Foreground Red
Write-Host " ** ERROR: If this error continues, Run `'CCU -Stop`'" -Foreground Red
}
} else {
Write-Host " ** CCU is not running." -Foreground Yellow
}
if (Get-Process -Name choco -ErrorAction SilentlyContinue) {
Write-Host " ** Chocolatey is currently running.`n" -Foreground Yellow
}
Write-Host ""
print_footer
return
}
if ($Start) {
if (Test-Path "$RunningFile") {
Write-Host " ** CCU is already running!`n" -Foreground Yellow
return
}
if ($Background) {
$CCUProcess = Start-Process PowerShell -ArgumentList '$host.ui.RawUI.WindowTitle=''Chocolatey Continuous Upgrader''; Import-Module ./CCU.psm1; for (;;) {keep_checking}' -WindowStyle Hidden -WorkingDirectory "$execdir" -PassThru
$CCUProcess | Export-Clixml -Path "$RunningFile"
}
if ($Debug) {
$CCUProcess = Start-Process PowerShell -ArgumentList '$host.ui.RawUI.WindowTitle=''Chocolatey Continuous Upgrader''; Import-Module ./CCU.psm1; for (;;) {keep_checking}' -WindowStyle Normal -WorkingDirectory "$execdir" -PassThru
$CCUProcess | Export-Clixml -Path "$RunningFile"
}
Write-Host " ** CCU STARTED." -Foreground Yellow
if ($Notify) {Write-Host " ** CCU notifications are ENABLED." -Foreground Yellow} else {Write-Host " ** CCU notifications are DISABLED." -Foreground Yellow}
if ($NoUpgrades) {Write-Host " ** CCU package upgrades are DISABLED." -Foreground Yellow} else {Write-Host " ** CCU package upgrades are ENABLED." -Foreground Yellow}
Write-Host " ** CCU will check for upgrades every $WaitTime minutes.`n" -Foreground Yellow
print_footer
return
}
if ($Stop) {
if (Get-Process -Name choco -ErrorAction SilentlyContinue) {
Write-Host " ** Chocolatey is currently running. Waiting for it to finish..." -Foreground Yellow
while (Get-Process -Name choco -ErrorAction SilentlyContinue) {Start-Sleep 1}
}
if (Test-Path "$RunningFile") {$CCUProcess = Import-Clixml -Path "$RunningFile"}
$CCUProcess | Stop-Process -ErrorAction SilentlyContinue
if (!$?) {
Write-Host " ** CCU already STOPPED!`n" -Foreground Yellow
} else {
Write-Host " ** CCU STOPPED.`n" -Foreground Yellow
}
if (Test-Path "$RunningFile") {Remove-Item "$RunningFile" -Force}
if (Test-Path "$StatusFile") {Remove-Item "$StatusFile" -Force}
print_footer
return
}
# CCU.psm1 (Chocolatey Continuous Upgrader) Copyleft 2023 by Bill Curran AKA BCURRAN3
# LICENSE: GNU GPL v3 - https://www.gnu.org/licenses/gpl.html
# Open a GitHub issue at https://github.com/bcurran3/ChocolateyPackages/issues if you have suggestions for improvement.
if (Get-Module -ListAvailable -Name BurntToast) {$ToastAvailable=$True} else {$ToastAvailable=$False}
if (!$env:ChocolateyToolsLocation) {$env:ChocolateyToolsLocation = "$env:SystemDrive\tools"}
$StatusFile="$env:chocolateyToolsLocation\BCURRAN3\CCU-status.tmp"
if (Test-Path "$StatusFile") {Remove-Item "$StatusFile" -Force}
if ($env:AutoUpgrade -eq 'true') {$AutoUpgrade=$True} else {$AutoUpgrade=$False}
if ($env:Notify -eq 'true') {$Notify=$True} else {$Notify=$False}
if ($env:WaitTime -eq '') {$WaitTime=30} else {$WaitTime=$env:WaitTime}
# Send Windows MSG messages to foreground about available upgrades
function send_msg {
& msg * /time:3 "Chocolatey Continuous Upgrader:`n$Feedpackage v$FeedPackageVersion`nUPGRADE AVAILABLE."
}
# Send toast messages to foreground about available upgrades
function send_toast {
if ((Get-Service WinRM).Status -eq 'Stopped') {Start-Service 'WinRM' -ErrorAction SilentlyContinue}
if ((Get-Service WinRM).Status -eq 'Running') {
Invoke-Command -ComputerName $(hostname) -ArgumentList $FeedPackage,$FeedPackageVersion -ScriptBlock {param([string]$FeedPackage, [string]$FeedPackageVersion) Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force; New-BurntToastNotification -Text "Chocolatey Continuous Upgrader:`n", "$Feedpackage v$FeedPackageVersion `nUPGRADE AVAILABLE." -AppLogo "$env:PUBLIC\Pictures\choco.ico"}
} else {
send_msg
}
}
function send_notification {
if ($ToastAvailable -eq $True) {send_toast} else {send_msg}
}
# Meat and Potatoes
function keep_checking {
Clear-Host
if ($env:UpgradeAllFirst -eq 'true') {
if ($Notify) {Add-Content -Path "$StatusFile" -Value " ** CCU notifications are ENABLED."} else {Add-Content -Path "$StatusFile" -Value " ** CCU notifications are DISABLED."}
if ($NoUpgrades) {Add-Content -Path "$StatusFile" -Value " ** CCU package upgrades are DISABLED."} else {Add-Content -Path "$StatusFile" -Value " ** CCU package upgrades are ENABLED."}
Add-Content -Path "$StatusFile" -Value " ** CCU will check for upgrades every $WaitTime minutes`n."
Write-Host " ** CCU UpgradeAllFirst is ENABLED." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU UpgradeAllFirst is ENABLED."
if (Get-Process -Name choco -ErrorAction SilentlyContinue) {
Write-Host " ** Chocolatey is running elsewhere. Waiting for it to finish..." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** Chocolatey is running elsewhere. Waiting for it to finish..."
while (Get-Process -Name choco -ErrorAction SilentlyContinue) {Start-Sleep 1}
} else {
Write-Host " ** CCU is running `'choco upgrade all -y`'." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU is running `'choco upgrade all -y`'"
& choco upgrade all -y
}
if (Test-Path "$StatusFile") {Remove-Item "$StatusFile"}
$env:UpgradeAllFirst='false'
}
$FoundUpgrades=$False
if (!$WaitTime) {$WaitTime=30}
if ($Notify) {
Write-Host " ** CCU notifications are ENABLED." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU notifications are ENABLED."
} else {
Write-Host " ** CCU notifications are DISABLED." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU notifications are DISABLED."
}
if ($AutoUpgrade) {
Write-Host " ** CCU package upgrades are ENABLED." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU package upgrades are ENABLED."
} else {
Write-Host " ** CCU package upgrades are DISABLED." -Foreground Yellow
Add-Content -Path "$StatusFile" -Value " ** CCU package upgrades are DISABLED."
}
Add-Content -Path "$StatusFile" -Value " ** CCU is checking for upgrades every $WaitTime minutes."
# Get list of installed packages
Write-Host " ** Getting list of installed Chocolatey packages..." -Foreground Magenta
Write-Host " ** Found $((Get-Childitem $env:ChocolateyInstall\lib).count) installed Chocolatey packages" -Foreground Green
Write-Host " ** Found $((Get-Childitem $env:ChocolateyInstall\extensions).count) installed Chocolatey extensions" -Foreground Green
Write-Host " ** Found $((Get-Childitem $env:ChocolateyInstall\hooks).count) installed Chocolatey hooks" -Foreground Green
$InstalledPackages = Get-Childitem $env:ChocolateyInstall\lib | Split-Path -Leaf
$InstalledPackages = $InstalledPackages + (Get-Childitem $env:ChocolateyInstall\extensions | Split-Path -Leaf)
$InstalledPackages = $InstalledPackages + (Get-Childitem $env:ChocolateyInstall\hooks | Split-Path -Leaf)
# Get Feedburner list of upgraded packages
Write-Host " ** Getting Feedburner list of recently published Chocolatey packages..." -Foreground Magenta
try {
[xml]$feed = Invoke-WebRequest -Uri 'https://feeds.feedburner.com/chocolatey' | Select-Object -ExpandProperty Content
}
catch {
if ( $_.Exception.Response.StatusCode.Value__ -eq 404 ) {
Write-Host " ** 404 error getting https://feeds.feedburner.com/chocolatey" -Foreground Red
$WaitTimeRemaining=$WaitTime
Write-Host " ** Waiting $WaitTimeRemaining minutes before checking again...`r" -Foreground Cyan -NoNewLine
while ($WaitTimeRemaining -gt 0) {
Write-Host " ** Waiting $WaitTimeRemaining minutes before checking again... `r" -Foreground Cyan -NoNewLine
Sleep 60
$WaitTimeRemaining=$WaitTimeRemaining-1
}
return
} else { Write-Host " ** Bad response..." -Foreground Red }
}
$links = $feed.rss.channel.item.link
Write-Host " ** Found $($links.count) Chocolatey packages in Feedburner list." -Foreground Green
Write-Host " ** $($feed.rss.channel.item[$($links.count)-1].title) is the oldest Chocolatey package published at $([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date -Date $feed.rss.channel.item[$($links.count)-1].updated), $(Get-TimeZone).id))." -Foreground Green
Write-Host " ** $($feed.rss.channel.item[0].title) is the latest Chocolatey package published at $([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date -Date $feed.rss.channel.item[0].updated), $(Get-TimeZone).id))." -Foreground Green
# Upgrade and/or notify about upgraded packages
Write-Host " ** CCU checked for upgrades at $(date)." -Foreground Magenta
Add-Content -Path "$StatusFile" -Value ""
Add-Content -Path "$StatusFile" -Value " ** CCU checked for upgrades at $(date)."
for ($link=0; $link -lt $links.count; $link++) {
$FeedPackage = $links[$link] | split-path | split-path -leaf
$FeedPackageVersion = $links[$link] | split-path -leaf
for ($installed=0; $installed -lt $InstalledPackages.count; $installed++) {
if ($InstalledPackages[$installed] -eq $FeedPackage) {
[xml]$nuspecFile = Get-Content "$env:ChocolateyInstall\lib\$FeedPackage\$FeedPackage.nuspec"
$InstalledVersion=$nuspecFile.package.metadata.version
if ($FeedPackageVersion -gt $InstalledVersion) {
$FoundUpgrades=$True
Write-Host " ** Found upgrade for $FeedPackage (v$FeedPackageVersion published $([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date -Date $feed.rss.channel.item[$link].updated), $(Get-TimeZone).id)))" -Foreground Magenta
Add-Content -Path "$StatusFile" -Value " ** Found upgrade for $FeedPackage (v$FeedPackageVersion published $([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date -Date $feed.rss.channel.item[$link].updated), $(Get-TimeZone).id)))"
if ($Notify) {send_notification}
if ($AutoUpgrade) {
if (Get-Process -Name choco -ErrorAction SilentlyContinue) {
Write-Host " ** Chocolatey is running elsewhere. Waiting for it to finish..." -Foreground Yellow
while (Get-Process -Name choco -ErrorAction SilentlyContinue) {Start-Sleep 1}
} else {
& choco upgrade $FeedPackage -y
if (!$LASTEXITCODE) {
Add-Content -Path "$StatusFile" -Value " ** choco upgrade of $FeedPackage SUCCESSFUL."
} else {
Add-Content -Path "$StatusFile" -Value " ** choco upgrade of $FeedPackage had ERRORS. ($LASTEXITCODE)"
}
}
}
}
}
}
}
if (!$FoundUpgrades) {
Write-Host " ** CCU found no packages to upgrade." -Foreground Magenta
Add-Content -Path "$StatusFile" -Value " ** CCU found no packages to upgrade."
}
$WaitTimeRemaining=$WaitTime
Write-Host " ** Waiting $WaitTimeRemaining minutes before checking again...`r" -Foreground Cyan -NoNewLine
while ($WaitTimeRemaining -gt 0) {
Write-Host " ** Waiting $WaitTimeRemaining minutes before checking again... `r" -Foreground Cyan -NoNewLine
Sleep 60
$WaitTimeRemaining=$WaitTimeRemaining-1
}
if (Test-Path "$StatusFile") {Remove-Item "$StatusFile"}
}
$ErrorActionPreference = 'Stop'
$packageName = 'choco-continuous-upgrader'
$scriptDir = "$(Get-ToolsLocation)\BCURRAN3"
Remove-Item "$scriptDir\CCU*.*" -Force -ErrorAction SilentlyContinue | Out-Null
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 |
---|---|---|---|---|
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.2 | 730 | Monday, January 15, 2024 | Approved | |
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.1 | 72 | Monday, December 11, 2023 | Approved | |
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.0 | 46 | Sunday, November 26, 2023 | Approved | |
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.0-RC2 | 37 | Wednesday, November 22, 2023 | Exempted | |
(unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 1.0.0-RC1 | 36 | Sunday, November 19, 2023 | Exempted |
Copyleft Bill Curran
CHANGELOG:
- 1.0.2 - fixed bug where $env:ChocolateyToolsLocation wasn't defined before use
- 1.0.1 - Re-worded some status messages and added timestamp to last check. If the event WinRM fails to start for toast notifications MSG will now be used.
- 1.0.0 - initial release
ROADMAP
- Nothing planned.
- It would be neat to make a tray app that replicates GeekMode...
This package has no dependencies.
Ground Rules:
- This discussion is only about (unofficial) Chocolatey Continuous Upgrader (CCU) (Script) and the (unofficial) Chocolatey Continuous Upgrader (CCU) (Script) 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 (unofficial) Chocolatey Continuous Upgrader (CCU) (Script), 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.