powershell_check_for_updates
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
powershell_check_for_updates [2013/11/18 08:14] – created stephen | powershell_check_for_updates [2017/02/07 21:27] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 5: | Line 5: | ||
#### Check for updates | #### Check for updates | ||
- | #### Version 1.1 | + | #### Version 1.36 |
- | #### Last updated | + | #### Last updated |
- | #### The cononical | + | #### The canonical |
+ | |||
+ | $appsToCheck = @{ | ||
+ | ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | # ; ' | ||
+ | } | ||
- | $appsToCheck | + | function WebRequest ($url) { |
- | + | [net.httpwebrequest]$httpwebrequest | |
- | $versionNumbers = @{ | + | [net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse() |
- | ' | + | |
- | | + | if (!$httpwebresponse) |
- | ; ' | + | |
- | ; ' | + | |
- | ; ' | + | |
- | ; ' | + | $reader |
- | ; ' | + | |
+ | | ||
+ | |||
+ | return $WSResponse | ||
} | } | ||
+ | |||
+ | function WebRequest ($url) { | ||
+ | [net.httpwebrequest]$httpwebrequest = [net.webrequest]:: | ||
+ | [net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse() | ||
+ | |||
+ | if (!$httpwebresponse) { | ||
+ | return $null | ||
+ | } | ||
+ | |||
+ | $reader = new-object IO.StreamReader($httpwebresponse.getResponseStream()) | ||
+ | $WSResponse = $reader.ReadToEnd() | ||
+ | $reader.Close() | ||
+ | |||
+ | return $WSResponse | ||
+ | } | ||
+ | |||
function GetVersionNumberFromWeb ($appName, $url, $regexPattern) | function GetVersionNumberFromWeb ($appName, $url, $regexPattern) | ||
{ | { | ||
- | $response = Invoke-WebRequest | + | $response = WebRequest $url |
- | + | ||
- | if ($response.StatusCode -ne 200) | + | if (!$response) { |
- | | + | |
Write-Host " | Write-Host " | ||
- | Write-Host " | ||
return | return | ||
} | } | ||
- | + | ||
- | $versionNumberMatches = ([regex]$regexPattern).matches($response.Content) | + | Out-File -filepath (Join-path $env:temp " |
- | + | ||
- | if ($versionNumberMatches.Count -eq 0) | + | if ($regexPattern.EndsWith('/ |
- | | + | # Use a bit of a hack to get singleline mode. |
+ | $regexPattern = $regexPattern.Substring(0, | ||
+ | $response = $response.Replace(" | ||
+ | } | ||
+ | |||
+ | $versionNumberMatches = ([regex]$regexPattern).matches($response) | ||
+ | |||
+ | if ($versionNumberMatches.Count -eq 0) { | ||
Write-Host " | Write-Host " | ||
return | return | ||
} | } | ||
- | if ($versionNumberMatches.Count -ne 1) | + | if ($versionNumberMatches.Count -ne 1) { |
- | | + | |
Write-Host " | Write-Host " | ||
return | return | ||
} | } | ||
- | if (! $versionNumberMatches[0].Success) | + | if (! $versionNumberMatches[0].Success) { |
- | | + | |
Write-Host " | Write-Host " | ||
return | return | ||
} | } | ||
- | if (! $versionNumberMatches[0].Groups[" | + | if (! $versionNumberMatches[0].Groups[" |
- | | + | |
Write-Host " | Write-Host " | ||
return | return | ||
} | } | ||
+ | |||
$latestVersionNumber = $versionNumberMatches[0].Groups[" | $latestVersionNumber = $versionNumberMatches[0].Groups[" | ||
Write-Host " | Write-Host " | ||
+ | |||
return $latestVersionNumber | return $latestVersionNumber | ||
} | } | ||
- | + | ||
function CheckLocalFile ($appName, $url, $regexPattern, | function CheckLocalFile ($appName, $url, $regexPattern, | ||
{ | { | ||
- | $appInfo = Get-Command $localFilename | + | |
+ | $fullLocalFilename = $localFilename | ||
+ | } elseif (Test-Path " | ||
+ | $fullLocalFilename = " | ||
+ | } elseif (Test-Path " | ||
+ | $fullLocalFilename = " | ||
+ | } else { | ||
+ | Write-Host " | ||
+ | return | ||
+ | } | ||
+ | |||
+ | | ||
$currentVersionNumber = $appInfo.FileVersionInfo.ProductVersion | $currentVersionNumber = $appInfo.FileVersionInfo.ProductVersion | ||
+ | |||
if ($extraFormatting.Contains('; | if ($extraFormatting.Contains('; | ||
{ | { | ||
Line 74: | Line 133: | ||
{ | { | ||
$currentVersionNumber = $currentVersionNumber.Replace(' | $currentVersionNumber = $currentVersionNumber.Replace(' | ||
+ | } | ||
+ | if ($extraFormatting.Contains('; | ||
+ | { | ||
+ | $currentVersionNumber = $currentVersionNumber.Substring(0, | ||
} | } | ||
if ($extraFormatting.Contains('; | if ($extraFormatting.Contains('; | ||
+ | { | ||
+ | $currentVersionNumber = $currentVersionNumber.Substring(0, | ||
+ | } | ||
+ | while ($extraFormatting.Contains('; | ||
{ | { | ||
$currentVersionNumber = $currentVersionNumber.Substring(0, | $currentVersionNumber = $currentVersionNumber.Substring(0, | ||
Line 88: | Line 155: | ||
$currentVersionNumber = $Matches.Values | $currentVersionNumber = $Matches.Values | ||
} | } | ||
+ | |||
CheckCurrentVersionNumber $appName $url $regexPattern $currentVersionNumber | CheckCurrentVersionNumber $appName $url $regexPattern $currentVersionNumber | ||
} | } | ||
+ | |||
function CheckCurrentVersionNumber ($appName, $url, $regexPattern, | function CheckCurrentVersionNumber ($appName, $url, $regexPattern, | ||
{ | { | ||
$latestVersionNumber = GetVersionNumberFromWeb $appName $url $regexPattern | $latestVersionNumber = GetVersionNumberFromWeb $appName $url $regexPattern | ||
- | if (! $latestVersionNumber) | + | if (! $latestVersionNumber) { |
- | | + | |
return | return | ||
- | } | + | } |
- | + | ||
Write-Host " | Write-Host " | ||
- | + | ||
- | if ($currentVersionNumber -ne $latestVersionNumber) | + | if ($currentVersionNumber -ne $latestVersionNumber) { |
- | | + | |
Write-Host " | Write-Host " | ||
- | } | + | } else { |
- | | + | |
- | | + | |
Write-Host " | Write-Host " | ||
} | } | ||
} | } | ||
+ | |||
function CheckAppCurrentVersionNumber ($appName) | function CheckAppCurrentVersionNumber ($appName) | ||
{ | { | ||
switch ($appName) | switch ($appName) | ||
{ | { | ||
+ | ' | ||
#### Semi-automatic checks #### | #### Semi-automatic checks #### | ||
- | 'TrueCrypt' | + | 'ThisScript' |
{ | { | ||
- | CheckCurrentVersionNumber 'TrueCrypt' ' | + | CheckCurrentVersionNumber 'ThisScript' ' |
- | '\>Latest Stable | + | '>#### Version (?< |
- | $versionNumbers['TrueCrypt'] | + | $appsToCheck['ThisScript'] |
} | } | ||
' | ' | ||
{ | { | ||
CheckCurrentVersionNumber ' | CheckCurrentVersionNumber ' | ||
- | 'href=" | + | '> |
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
' | ' | ||
{ | { | ||
- | CheckCurrentVersionNumber ' | + | CheckCurrentVersionNumber ' |
- | 'ConEmu | + | '\[ConEmu_Preview_2\]\s*version=(?< |
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
' | ' | ||
{ | { | ||
CheckCurrentVersionNumber ' | CheckCurrentVersionNumber ' | ||
- | '>Paint\.NET\s*v(?< | + | '>paint\.net\s*(?< |
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
' | ' | ||
Line 146: | Line 209: | ||
CheckCurrentVersionNumber ' | CheckCurrentVersionNumber ' | ||
'< | '< | ||
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
' | ' | ||
Line 152: | Line 215: | ||
CheckCurrentVersionNumber ' | CheckCurrentVersionNumber ' | ||
'<a href=" | '<a href=" | ||
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
' | ' | ||
{ | { | ||
- | CheckCurrentVersionNumber ' | + | CheckCurrentVersionNumber ' |
- | '<title>Notepad\+\+ v(?< | + | '>Current Version:\s*(?:<\w+>\s*)*(?< |
- | $versionNumbers[' | + | $appsToCheck[' |
} | } | ||
+ | ' | ||
+ | { | ||
+ | CheckCurrentVersionNumber ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckCurrentVersionNumber ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckCurrentVersionNumber ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckCurrentVersionNumber ' | ||
+ | ' | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | |||
#### Fully-automatic checks #### | #### Fully-automatic checks #### | ||
' | ' | ||
{ | { | ||
CheckLocalFile ' | CheckLocalFile ' | ||
- | 'href=" | + | '>The current stable release of GIMP is < |
- | 'C:\Program Files\GIMP 2\bin\gimp-2.8.exe' '' | + | |
} | } | ||
' | ' | ||
Line 171: | Line 259: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
' | ' | ||
- | 'C:\Program Files (x86)\7-Zip\7z.exe' '' | + | |
} | } | ||
' | ' | ||
Line 177: | Line 265: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
' | ' | ||
- | 'C:\Program Files (x86)\WinMerge\WinMergeU.exe' '' | + | |
} | } | ||
' | ' | ||
{ | { | ||
CheckLocalFile ' | CheckLocalFile ' | ||
- | ' | + | ' |
- | 'C:\Program Files (x86)\foobar2000\foobar2000.exe' ` | + | |
'; | '; | ||
} | } | ||
' | ' | ||
{ | { | ||
- | CheckLocalFile ' | + | CheckLocalFile ' |
- | '\<p id=" | + | '<title> |
- | 'C:\Program Files (x86)\Fiddler2\fiddler.exe' '' | + | |
+ | | ||
} | } | ||
' | ' | ||
Line 196: | Line 285: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
'< | '< | ||
- | 'C:\Program Files (x86)\ProcessExplorer\procexp.exe' '' | + | |
} | } | ||
' | ' | ||
Line 202: | Line 291: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
'< | '< | ||
- | 'C:\Program Files (x86)\ProcessMonitor\procmon.exe' '' | + | |
} | } | ||
# 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 209: | Line 298: | ||
# CheckLocalFile ' | # CheckLocalFile ' | ||
# '< | # '< | ||
- | # 'C:\Program Files (x86)\Notepad++\notepad++.exe' '' | + | # |
# } | # } | ||
' | ' | ||
Line 215: | Line 304: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
' | ' | ||
- | 'C:\Program Files (x86)\VideoLAN\VLC\vlc.exe' ` | + | |
'; | '; | ||
} | } | ||
Line 221: | Line 310: | ||
{ | { | ||
CheckLocalFile ' | CheckLocalFile ' | ||
- | '> | + | '> |
- | 'C:\Program Files (x86)\FileZilla | + | |
'; | '; | ||
} | } | ||
Line 229: | Line 318: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
'> | '> | ||
- | 'C:\Program Files\ImageMagick\mogrify.exe' '' | + | |
} | } | ||
' | ' | ||
Line 235: | Line 324: | ||
CheckLocalFile ' | CheckLocalFile ' | ||
'> | '> | ||
- | 'C:\Program Files\TortoiseSVN\bin\TortoiseSVN.dll' ` | + | |
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | ' | ||
+ | $appsToCheck[' | ||
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | ' | ||
+ | $appsToCheck[' | ||
+ | '; | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | '> | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | ' | ||
+ | $appsToCheck[' | ||
+ | } | ||
+ | ' | ||
+ | { | ||
+ | CheckLocalFile ' | ||
+ | ' | ||
+ | $appsToCheck[' | ||
'; | '; | ||
} | } | ||
Line 244: | Line 393: | ||
} | } | ||
} | } | ||
- | + | ||
- | + | cls | |
- | foreach ($appName in $AppsToCheck) { CheckAppCurrentVersionNumber ($appName) } | + | foreach ($appName in $AppsToCheck.Keys) { CheckAppCurrentVersionNumber ($appName) } |
- | + | # | |
- | Write-Host "Press any key to exit." | + | |
- | $null = $Host.UI.RawUI.ReadKey(" | + | |
</ | </ |
powershell_check_for_updates.1384762451.txt.gz · Last modified: 2017/01/01 19:51 (external edit)