User Tools

Site Tools


powershell_check_for_updates

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
powershell_check_for_updates [2014/04/28 03:34] stephenpowershell_check_for_updates [2017/02/07 21:27] (current) – external edit 127.0.0.1
Line 3: Line 3:
 <code powershell> <code powershell>
 #requires -version 3.0 #requires -version 3.0
- +
 #### Check for updates #### Check for updates
-#### Version 1.8 +#### Version 1.36 
-#### Last updated 2014-04-28+#### Last updated 2017-02-07
 #### The canonical version of this script is at http://tallguyracing.com/wiki/doku.php?id=powershell_check_for_updates #### The canonical version of this script is at http://tallguyracing.com/wiki/doku.php?id=powershell_check_for_updates
    
 $appsToCheck = @{ $appsToCheck = @{
-          'Dummy'            = 'Dummy'           +          'Dummy'            = 'Dummy' 
-        ; 'TrueCrypt       = '7.1a+        ; 'ThisScript      = '1.31
-        ; 'Anki'             = '2.0.22+        ; 'Anki'             = '2.0.36
-        ; 'ConEmu'           = '140124+        ; 'ConEmu'           = '160619
-        ; 'Paint.NET'        = '3.5.11+        ; 'Paint.NET'        = '4.0.9
-        ; 'Rockbox'          = '3.13' +#       ; 'Rockbox'          = '3.13' 
-        ; 'DokuWiki'         = '2013-12-08+#       ; 'DokuWiki'         = '2013-05-10
-        ; 'Notepad++'        = '6.5.3        # Hopefully, this can be reverted to a fully automatic check in the future. +        ; 'Notepad++'        = '6.9.2        # Hopefully, this can be reverted to a fully automatic check in the future. 
-      ; 'Notepad++'        = 'Notepad++\notepad++.exe+       ; 'Notepad++'        = 'Notepad++\notepad++.exe'
-        ; 'Inkscape'         = '0.48.4' +
-        ; 'Hugin'            = '2013.0.0'+
         ; 'GIMP'             = 'GIMP 2\bin\gimp-2.8.exe'         ; 'GIMP'             = 'GIMP 2\bin\gimp-2.8.exe'
         ; '7zip'             = '7-Zip\7z.exe'         ; '7zip'             = '7-Zip\7z.exe'
         ; 'WinMerge'         = 'WinMerge\WinMergeU.exe'         ; 'WinMerge'         = 'WinMerge\WinMergeU.exe'
-        ; 'Foobar2000'       = 'foobar2000\uninstall.exe'+#       ; 'Foobar2000'       = 'foobar2000\foobar2000.exe'
         ; 'Fiddler'          = 'Fiddler2\fiddler.exe'         ; 'Fiddler'          = 'Fiddler2\fiddler.exe'
-        ; 'Process Explorer' = 'ProcessExplorer\procexp.exe' +        ; 'Process Explorer' = 'C:\tools\sysinternals\procexp.exe' 
-        ; 'Process Monitor'  = 'ProcessMonitor\procmon.exe' +        ; 'Process Monitor'  = 'C:\tools\sysinternals\procmon.exe' 
-        ; 'VLC'              = 'VideoLAN\VLC\vlc.exe'+       ; 'VLC'              = 'VideoLAN\VLC\vlc.exe'
         ; 'FileZilla'        = 'FileZilla FTP Client\filezilla.exe'         ; 'FileZilla'        = 'FileZilla FTP Client\filezilla.exe'
-        ; 'ImageMagick'      = 'ImageMagick\mogrify.exe' +#        ; 'ImageMagick'      = 'ImageMagick\magick.exe' 
-        ; 'TortoiseSVN'      = 'TortoiseSVN\bin\TortoiseSVN.dll'+       ; 'TortoiseSVN'      = 'TortoiseSVN\bin\TortoiseSVN.dll'
         ; 'WinDirStat'       = 'WinDirStat\windirstat.exe'         ; 'WinDirStat'       = 'WinDirStat\windirstat.exe'
-        ; 'Expresso        = 'Ultrapico\Expresso\Expresso.exe' +#        ; 'LibreOffice     = 'LibreOffice 5\program\soffice.exe' 
-        ; 'LibreOffice     = 'LibreOffice 4\program\soffice.exe' +       ; 'VirtualBox      = 'Oracle\VirtualBox\VBoxSVC.exe' 
-        ; 'VirtualBox      = 'Oracle\VirtualBox\VirtualBox.exe'+       ; 'Tixati          = 'tixati\tixati.exe' 
 +#        ; 'VeraCrypt'        = 'VeraCrypt\VeraCrypt.exe' 
 +#        ; 'IrfanView'        = 'IrfanView\i_view32.exe'
 } }
  
Line 41: Line 41:
     [net.httpwebrequest]$httpwebrequest = [net.webrequest]::create($url)     [net.httpwebrequest]$httpwebrequest = [net.webrequest]::create($url)
     [net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse()     [net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse()
 + 
     if (!$httpwebresponse) {     if (!$httpwebresponse) {
         return $null         return $null
     }     }
-        + 
     $reader = new-object IO.StreamReader($httpwebresponse.getResponseStream())     $reader = new-object IO.StreamReader($httpwebresponse.getResponseStream())
     $WSResponse = $reader.ReadToEnd()     $WSResponse = $reader.ReadToEnd()
     $reader.Close()     $reader.Close()
-     +  
-    out-file -filepath C:\Temp\Debug.txt -inputobject $WSResponse +    return $WSResponse 
 +
 +  
 +function WebRequest ($url) { 
 +    [net.httpwebrequest]$httpwebrequest = [net.webrequest]::create($url) 
 +    [net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse() 
 +  
 +    if (!$httpwebresponse) { 
 +        return $null 
 +    } 
 +  
 +    $reader = new-object IO.StreamReader($httpwebresponse.getResponseStream()) 
 +    $WSResponse = $reader.ReadToEnd() 
 +    $reader.Close() 
 + 
     return $WSResponse     return $WSResponse
 } }
Line 59: Line 72:
     $response = WebRequest $url     $response = WebRequest $url
    
-    if (!$response) +    if (!$response) {
-    {+
         Write-Host "FAILED: ${appName}: Could not get the web page." -ForegroundColor Red         Write-Host "FAILED: ${appName}: Could not get the web page." -ForegroundColor Red
         return         return
 +    }
 + 
 +    Out-File -filepath (Join-path $env:temp "$appName.html") -inputobject $response
 + 
 +    if ($regexPattern.EndsWith('/s')) {
 +        # Use a bit of a hack to get singleline mode.
 +        $regexPattern = $regexPattern.Substring(0, $regexPattern.Length - 2)
 +        $response = $response.Replace("`n", " ")
     }     }
    
     $versionNumberMatches = ([regex]$regexPattern).matches($response)     $versionNumberMatches = ([regex]$regexPattern).matches($response)
    
-    if ($versionNumberMatches.Count -eq 0) +    if ($versionNumberMatches.Count -eq 0) {
-    {+
         Write-Host "FAILED: ${appName}: Could not get version number from the web page. Nothing matched the regex." -ForegroundColor Red         Write-Host "FAILED: ${appName}: Could not get version number from the web page. Nothing matched the regex." -ForegroundColor Red
         return         return
     }     }
-    if ($versionNumberMatches.Count -ne 1) +    if ($versionNumberMatches.Count -ne 1) {
-    {+
         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex had more than one match." -ForegroundColor Red         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex had more than one match." -ForegroundColor Red
         return         return
     }     }
-    if (! $versionNumberMatches[0].Success) +    if (! $versionNumberMatches[0].Success) {
-    {+
         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex match was not successful." -ForegroundColor Red         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex match was not successful." -ForegroundColor Red
         return         return
     }     }
-    if (! $versionNumberMatches[0].Groups["versionNumber"].Success) +    if (! $versionNumberMatches[0].Groups["versionNumber"].Success) {
-    {+
         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex group was not successful." -ForegroundColor Red         Write-Host "FAILED: ${appName}: Could not get version number from the web page. The regex group was not successful." -ForegroundColor Red
         return         return
Line 93: Line 109:
     return $latestVersionNumber     return $latestVersionNumber
 } }
-  
    
 function CheckLocalFile ($appName, $url, $regexPattern, $localFilename, $extraFormatting) function CheckLocalFile ($appName, $url, $regexPattern, $localFilename, $extraFormatting)
Line 118: Line 133:
     {     {
         $currentVersionNumber = $currentVersionNumber.Replace(' ', '')         $currentVersionNumber = $currentVersionNumber.Replace(' ', '')
 +    }
 +    if ($extraFormatting.Contains(';TrimTrailingZero;') -and $currentVersionNumber.EndsWith('0'))
 +    {
 +        $currentVersionNumber = $currentVersionNumber.Substring(0, $currentVersionNumber.Length - 1)
     }     }
     if ($extraFormatting.Contains(';TrimTrailingDotZero;') -and $currentVersionNumber.EndsWith('.0'))     if ($extraFormatting.Contains(';TrimTrailingDotZero;') -and $currentVersionNumber.EndsWith('.0'))
Line 143: Line 162:
 { {
     $latestVersionNumber = GetVersionNumberFromWeb $appName $url $regexPattern     $latestVersionNumber = GetVersionNumberFromWeb $appName $url $regexPattern
-    if (! $latestVersionNumber) +    if (! $latestVersionNumber) {
-    {+
         return         return
-    } +    } 
- +
    
     Write-Host "${appName}: The current version number is $currentVersionNumber."     Write-Host "${appName}: The current version number is $currentVersionNumber."
    
-    if ($currentVersionNumber -ne $latestVersionNumber) +    if ($currentVersionNumber -ne $latestVersionNumber) {
-    {+
         Write-Host "${appName}: Update required!" -ForegroundColor Green         Write-Host "${appName}: Update required!" -ForegroundColor Green
-    } +    } else {
-    else +
-    {+
         Write-Host "${appName}: No update required."         Write-Host "${appName}: No update required."
     }     }
Line 167: Line 181:
         'Dummy' { }         'Dummy' { }
         #### Semi-automatic checks ####         #### Semi-automatic checks ####
-        'TrueCrypt'+        'ThisScript'
         {         {
-            CheckCurrentVersionNumber 'TrueCrypt' 'http://www.truecrypt.org/downloads' ` +            CheckCurrentVersionNumber 'ThisScript' 'http://tallguyracing.com/wiki/doku.php?id=powershell_check_for_updates' ` 
-                '\>Latest Stable Version (?<versionNumber>\d+\.\d+\w+)\<' ` +                '>#### Version (?<versionNumber>\d+\.\d+)<'
-                $appsToCheck['TrueCrypt']+                $appsToCheck['ThisScript']
         }         }
         'Anki'         'Anki'
         {         {
             CheckCurrentVersionNumber 'Anki' 'http://ankisrs.net/' `             CheckCurrentVersionNumber 'Anki' 'http://ankisrs.net/' `
-                'href="http://ankisrs\.net/download/mirror/anki-(?<versionNumber>\d+(?:\.\d+){2})\.exe"' `+                '>Download Anki for Windows Vista/7/8/10 \((?<versionNumber>\d+(?:\.\d+){2})\)<' `
                 $appsToCheck['Anki']                 $appsToCheck['Anki']
         }         }
         'ConEmu'         'ConEmu'
         {         {
-            CheckCurrentVersionNumber 'ConEmu' 'http://www.fosshub.com/ConEmu.html' ` +            CheckCurrentVersionNumber 'ConEmu' 'http://conemu.github.io/version.ini' ` 
-                '>Preview, Portable \(32-bit, 64-bit\)\s+- \d+\.\d+ MB \|\s+version(?<versionNumber>\d+)\s+\| <' `+                '\[ConEmu_Preview_2\]\s*version=(?<versionNumber>\w+)' `
                 $appsToCheck['ConEmu']                 $appsToCheck['ConEmu']
         }         }
Line 188: Line 202:
         {         {
             CheckCurrentVersionNumber 'Paint.NET' 'http://www.getpaint.net/index.html' `             CheckCurrentVersionNumber 'Paint.NET' 'http://www.getpaint.net/index.html' `
-                '>Paint\.NET\s*v(?<versionNumber>\d+(?:\.\d+){2})<' `+                '>paint\.net\s*(?<versionNumber>\d+(?:\.\d+){2})<' `
                 $appsToCheck['Paint.NET']                 $appsToCheck['Paint.NET']
         }         }
Line 205: Line 219:
         'Notepad++'         'Notepad++'
         {         {
-            CheckCurrentVersionNumber 'Notepad++' 'http://notepad-plus-plus.org/download/' ` +            CheckCurrentVersionNumber 'Notepad++' 'http://notepad-plus-plus.org/'
-                '<title>Notepad\+\+ v(?<versionNumber>\d+(?:\.\d+){1,2}) - Current Version</title>' `+                '>Current Version:\s*(?:<\w+>\s*)*(?<versionNumber>\d+(?:\.\d+){1,3})<' `
                 $appsToCheck['Notepad++']                 $appsToCheck['Notepad++']
         }         }
         'Inkscape'         'Inkscape'
         {         {
-            CheckCurrentVersionNumber 'Inkscape' 'http://www.inkscape.org/en/download/windows'+            CheckCurrentVersionNumber 'Inkscape' 'http://inkscape.org/en/download/windows'
-                '>Latest stable version \((?<versionNumber>\d+(?:\.\d+){2})\)<' `+                '>Latest stable version: Inkscape ?(?<versionNumber>\d+(?:\.\d+){1,2})<' `
                 $appsToCheck['Inkscape']                 $appsToCheck['Inkscape']
         }         }
Line 221: Line 235:
                 $appsToCheck['Hugin']                 $appsToCheck['Hugin']
         }         }
 +        'Stellarium' 
 +        { 
 +            CheckCurrentVersionNumber 'Stellarium' 'http://stellarium.org/'
 +                '>latest version is (?<versionNumber>\d+(?:\.\d+){2})<'
 +                $appsToCheck['Stellarium'
 +        } 
 +        'Gmvault' 
 +        { 
 +            CheckCurrentVersionNumber 'Gmvault' 'http://gmvault.org/'
 +                'Download\s+Gmvault<small>\s*\((?<versionNumber>\d+(?:\.\d+){1,2})\s*\)\s*</small>'
 +                $appsToCheck['Gmvault'
 +        } 
 + 
         #### Fully-automatic checks ####         #### Fully-automatic checks ####
         'GIMP'         'GIMP'
         {         {
             CheckLocalFile 'GIMP' 'http://www.gimp.org/downloads/' `             CheckLocalFile 'GIMP' 'http://www.gimp.org/downloads/' `
-                'href="http://download\.gimp\.org/pub/gimp/[^/]+/windows/gimp-(?<versionNumber>\d+(?:\.\d+){2})-setup\.exe"' `+                '>The current stable release of GIMP is <(b|strong)>(?<versionNumber>\d+(?:\.\d+){2})<\/(b|strong)>' `
                 $appsToCheck['GIMP'] ''                 $appsToCheck['GIMP'] ''
         }         }
Line 245: Line 271:
             CheckLocalFile 'Foobar2000' 'http://www.foobar2000.org/download' `             CheckLocalFile 'Foobar2000' 'http://www.foobar2000.org/download' `
                 'href="/getfile/[^/]+/foobar2000_v(?<versionNumber>\d+(?:\.\d+){1,2}).exe">foobar2000 v\d+(?:\.\d+){1,2}' `                 'href="/getfile/[^/]+/foobar2000_v(?<versionNumber>\d+(?:\.\d+){1,2}).exe">foobar2000 v\d+(?:\.\d+){1,2}' `
-                $appsToCheck['Foobar2000'] ''+                $appsToCheck['Foobar2000'
 +                ';TrimTrailingDotZero;'
         }         }
         'Fiddler'         'Fiddler'
         {         {
-            CheckLocalFile 'Fiddler' 'http://www.telerik.com/download/fiddler' ` +            CheckLocalFile 'Fiddler' 'https://chocolatey.org/packages/fiddler4' ` 
-                '>Download Fiddler4</a<p class=".+?">Version <strong>(?<versionNumber>\d+(?:\.\d+){2,3})</strong>, EXE, \d+ KB<' ` +                '<title>\s*Chocolatey\s+Gallery\s*\|\s*Fiddler\s*(?<versionNumber>\d+(?:\.\d+){2})'
-                $appsToCheck['Fiddler'] ''+                $appsToCheck['Fiddler'
 +                ';FirstThreeDigitsOnly;'
         }         }
         'Process Explorer'         'Process Explorer'
Line 263: Line 291:
             CheckLocalFile 'Process Monitor' 'http://technet.microsoft.com/en-US/sysinternals/bb896645' `             CheckLocalFile 'Process Monitor' 'http://technet.microsoft.com/en-US/sysinternals/bb896645' `
                 '<h1>Process Monitor v(?<versionNumber>\d+\.\d+)</h1>' `                 '<h1>Process Monitor v(?<versionNumber>\d+\.\d+)</h1>' `
-                $appsToCheck['Process Monitor'] ''+                $appsToCheck['Process Monitor'] ';TrimTrailingZero;'
         }         }
 #       Next time the version changes, try using this rather than the Semi-automatic check. #       Next time the version changes, try using this rather than the Semi-automatic check.
Line 282: Line 310:
         {         {
             CheckLocalFile 'FileZilla' 'http://filezilla-project.org/download.php?type=client' `             CheckLocalFile 'FileZilla' 'http://filezilla-project.org/download.php?type=client' `
-                '>The latest stable version of FileZilla Client is (?<versionNumber>\d+(?:\.\d+){2})<' `+                '>The latest stable version of FileZilla Client is (?<versionNumber>\d+(?:\.\d+){2,3})<' `
                 $appsToCheck['FileZilla'] `                 $appsToCheck['FileZilla'] `
                 ';CommaToFullStop;RemoveSpaces;TrimTrailingDotZero;'                 ';CommaToFullStop;RemoveSpaces;TrimTrailingDotZero;'
Line 322: Line 350:
         'LibreOffice'         'LibreOffice'
         {         {
-            CheckLocalFile 'LibreOffice' 'http://www.libreoffice.org/download'+            CheckLocalFile 'LibreOffice' 'http://www.libreoffice.org/download/libreoffice-fresh/' ` 
-                'Windows, version (?<versionNumber>\d+(?:\.\d+){2}), English' `+                '>Download Version (?<versionNumber>\d+(?:\.\d+){2})<' `
                 $appsToCheck['LibreOffice'] `                 $appsToCheck['LibreOffice'] `
                 ';FirstThreeDigitsOnly;'                 ';FirstThreeDigitsOnly;'
Line 330: Line 358:
         {         {
             CheckLocalFile 'VirtualBox' 'http://www.virtualbox.org/wiki/Downloads' `             CheckLocalFile 'VirtualBox' 'http://www.virtualbox.org/wiki/Downloads' `
-                '>VirtualBox (?<versionNumber>\d+(?:\.\d+){2}) for Windows hosts<' `+                '\>\s*VirtualBox\s*(?<versionNumber>\d+(?:\.\d+){1,2})\s*platform\s*packages\s*\<' `
                 $appsToCheck['VirtualBox'] `                 $appsToCheck['VirtualBox'] `
 +                ';FirstThreeDigitsOnly;'
 +        }
 +        'Tixati'
 +        {
 +            CheckLocalFile 'Tixati' 'http://www.tixati.com/download/' `
 +                '>Download Tixati v(?<versionNumber>\d+\.\d+)<' `
 +                $appsToCheck['Tixati'] ''
 +        }
 +        'VeraCrypt'
 +        {
 +            CheckLocalFile 'VeraCrypt' 'https://veracrypt.codeplex.com/wikipage?title=Downloads' `
 +                '>Latest Stable Release - (?<versionNumber>\d+\.\d+)' `
 +                $appsToCheck['VeraCrypt'] ''
 +        }
 +        'IrfanView'
 +        {
 +            CheckLocalFile 'IfranView' 'http://www.irfanview.com/checkversion.php' `
 +                'Current IrfanView version is: <b>(?<versionNumber>\d+\.\d+)' `
 +                $appsToCheck['IrfanView'] ''
 +        }
 +        'Deluge'
 +        {
 +            CheckLocalFile 'Deluge' 'http://deluge-torrent.org/' `
 +                '\>\s*(?<versionNumber>\d+(?:\.\d+)+)\s*\<' `
 +                $appsToCheck['Deluge'] `
                 ';FirstThreeDigitsOnly;'                 ';FirstThreeDigitsOnly;'
         }         }
Line 341: Line 394:
 } }
    
 +cls
 foreach ($appName in $AppsToCheck.Keys) { CheckAppCurrentVersionNumber ($appName) } foreach ($appName in $AppsToCheck.Keys) { CheckAppCurrentVersionNumber ($appName) }
-#CheckAppCurrentVersionNumber 'Hugin' +#CheckAppCurrentVersionNumber 'Fiddler'
-  +
-Write-Host "Press any key to exit." +
-$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")+
 </code> </code>
powershell_check_for_updates.1398656047.txt.gz · Last modified: 2017/01/01 19:51 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki