本文目录导读:

这是一个比较完整的自动检测并提醒软件更新的脚本示例,我会提供 Windows(PowerShell) 和 macOS/Linux(Shell) 两个版本。
Windows PowerShell 脚本(适合 Win10/Win11)
这个脚本会检查几个常见软件(如 Chrome、VS Code、7-Zip)的当前版本与官方最新版本,如果发现更新则弹出系统通知。
# 文件名: check-updates.ps1
# 用法: 右键"使用 PowerShell 运行",或添加到任务计划程序
# 定义要检查的软件列表(名称 + 获取版本的方法)
$SoftwareChecks = @(
@{
Name = "Google Chrome"
# 从注册表获取当前版本
CurrentVersion = (Get-ItemProperty "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome" -ErrorAction SilentlyContinue).DisplayVersion
# 从官方接口获取最新版本(JSON)
LatestVersionUrl = "https://omahaproxy.appspot.com/win?channel=stable&platform=win64&json=1"
# 解析 JSON 获取版本号的逻辑
ParseLatestVersion = { param($json) ($json | ConvertFrom-Json).versions[0].version }
# 下载地址
DownloadUrl = "https://www.google.com/chrome/"
}
@{
Name = "Visual Studio Code"
CurrentVersion = (Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\{EA457F21-F9CC-448E-B435-0A0B1E5D1A7D}" -ErrorAction SilentlyContinue).DisplayVersion
# VS Code 官方 GitHub Release API
LatestVersionUrl = "https://api.github.com/repos/microsoft/vscode/releases/latest"
ParseLatestVersion = { param($json) $json.tag_name -replace "^v", "" }
DownloadUrl = "https://code.visualstudio.com/download"
}
@{
Name = "7-Zip"
CurrentVersion = (Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip" -ErrorAction SilentlyContinue).DisplayVersion
# 7-Zip 官网页面解析(需要简单 HTML 解析)
LatestVersionUrl = "https://www.7-zip.org/"
ParseLatestVersion = {
param($html)
# 匹配类似 "Download 7-Zip 23.01" 这样的文本
if ($html -match 'Download 7-Zip (\d+\.\d+)') {
return $matches[1]
}
return $null
}
DownloadUrl = "https://www.7-zip.org/download.html"
}
)
# 引入系统通知程序集
Add-Type -AssemblyName System.Windows.Forms
foreach ($app in $SoftwareChecks) {
Write-Host "检查: $($app.Name)" -ForegroundColor Cyan
try {
# 获取当前版本
$current = $app.CurrentVersion
if (-not $current) {
Write-Host " ❌ 未安装或无法获取当前版本" -ForegroundColor Red
continue
}
Write-Host " 当前版本: $current"
# 获取最新版本(调用对应接口)
$response = Invoke-RestMethod -Uri $app.LatestVersionUrl -ErrorAction Stop
if ($app.ParseLatestVersion) {
$latest = & $app.ParseLatestVersion $response
} else {
$latest = $response # 如果直接返回版本字符串
}
if (-not $latest) {
Write-Host " ⚠️ 未能获取最新版本" -ForegroundColor Yellow
continue
}
Write-Host " 最新版本: $latest"
# 版本比较(使用 [version] 类型进行比较)
$currentVer = [version]$current
$latestVer = [version]$latest
if ($latestVer -gt $currentVer) {
Write-Host " ✅ 发现更新!" -ForegroundColor Green
# 弹出通知
$notify = New-Object System.Windows.Forms.NotifyIcon
$notify.Icon = [System.Drawing.SystemIcons]::Information
$notify.Visible = $true
$notify.ShowBalloonTip(10000, "软件更新提醒", "$($app.Name) 有新版可用!`n当前: $current → 最新: $latest`n下载: $($app.DownloadUrl)", [System.Windows.Forms.ToolTipIcon]::Info)
# 可选:打开下载页面
Start-Process $app.DownloadUrl
} else {
Write-Host " ✔️ 已是最新版" -ForegroundColor Gray
}
} catch {
Write-Host " ❌ 检查失败: $_" -ForegroundColor Red
}
Write-Host "------------------------"
}
# 保持窗口(双击运行时)
Read-Host "按 Enter 退出"
使用方式
- 将以上代码保存为
check-updates.ps1 - 右键 → 使用 PowerShell 运行
- 如需定时运行:
- 打开“任务计划程序”
- 创建任务 → 触发器设为“每天”或“登录时”
- 操作 → 启动程序 →
powershell.exe - 参数:
-ExecutionPolicy Bypass -File "C:\路径\check-updates.ps1"
macOS/Linux Shell 脚本(适合命令行环境)
这个脚本会使用 brew 和 apt 等包管理器,以及检查常见应用(Chrome、VS Code、Docker)的最新版本。
#!/bin/bash
# 文件名: check-updates.sh
# 用法: bash check-updates.sh 或添加到 cron
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
echo -e "${CYAN}=== 软件更新检查 ===${NC}"
echo "时间: $(date)"
echo "------------------------"
# 检查系统包管理器
if command -v brew &> /dev/null; then
echo -e "${GREEN}[Homebrew]${NC} 检查..."
outdated=$(brew outdated 2>/dev/null | head -20) # 最多显示20个
if [ -n "$outdated" ]; then
echo -e " ${YELLOW}有更新的包:${NC}"
echo "$outdated" | while IFS= read -r line; do
echo " • $line"
done
echo " 运行 'brew upgrade' 更新所有"
else
echo " ✔️ 所有 brew 包已是最新"
fi
fi
if command -v apt &> /dev/null; then
echo -e "${GREEN}[APT]${NC} 检查..."
sudo apt update -qq 2>/dev/null
upgradable=$(apt list --upgradable 2>/dev/null | grep -v "Listing..." | head -20)
if [ -n "$upgradable" ]; then
echo -e " ${YELLOW}可更新的 APT 包:${NC}"
echo "$upgradable"
echo " 运行 'sudo apt upgrade' 更新"
else
echo " ✔️ 所有 APT 包已是最新"
fi
fi
# 检查独立安装的应用
echo -e "${GREEN}[Google Chrome]${NC}"
if command -v google-chrome &> /dev/null || command -v google-chrome-stable &> /dev/null; then
# 获取当前版本
chrome_current=$(google-chrome-stable --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1)
if [ -z "$chrome_current" ]; then
chrome_current=$(google-chrome --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1)
fi
echo " 当前版本: $chrome_current"
# 获取最新版本(从 Google API)
chrome_latest=$(curl -s "https://omahaproxy.appspot.com/win?channel=stable&platform=win64&json=1" | python3 -c "import sys,json; print(json.load(sys.stdin)['versions'][0]['version'])" 2>/dev/null)
if [ -n "$chrome_latest" ]; then
echo " 最新版本: $chrome_latest"
if [ "$chrome_current" != "$chrome_latest" ]; then
echo -e " ${YELLOW}➡️ 有更新可用${NC}"
echo " 下载: https://www.google.com/chrome/"
else
echo " ✔️ 已是最新版"
fi
else
echo " ⚠️ 无法获取最新版本"
fi
else
echo -e " ${RED}❌ 未安装 Chrome${NC}"
fi
echo -e "${GREEN}[Visual Studio Code]${NC}"
if command -v code &> /dev/null; then
vsc_current=$(code --version 2>/dev/null | head -1)
echo " 当前版本: $vsc_current"
# 从 GitHub API 获取最新版本
vsc_latest=$(curl -s "https://api.github.com/repos/microsoft/vscode/releases/latest" | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'].lstrip('v'))" 2>/dev/null)
if [ -n "$vsc_latest" ]; then
echo " 最新版本: $vsc_latest"
if [ "$vsc_current" != "$vsc_latest" ] && [ "$(printf '%s\n' "$vsc_latest" "$vsc_current" | sort -V | tail -1)" = "$vsc_latest" ]; then
echo -e " ${YELLOW}➡️ 有更新可用${NC}"
echo " 运行 'brew upgrade --cask visual-studio-code' 或手动下载"
else
echo " ✔️ 已是最新版"
fi
else
echo " ⚠️ 无法获取最新版本"
fi
else
echo -e " ${RED}❌ 未安装 VS Code${NC}"
fi
echo -e "${GREEN}[Docker]${NC}"
if command -v docker &> /dev/null; then
docker_current=$(docker --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1)
echo " 当前版本: $docker_current"
# Docker 版本检查(简化)
docker_latest=$(curl -s "https://hub.docker.com/v2/repositories/library/docker/tags?page_size=1&ordering=last_updated" | python3 -c "import sys,json; print(json.load(sys.stdin)['results'][0]['name'])" 2>/dev/null)
# 注意:这里获取的是最新标签,可能不准确,仅供参考
if [ -n "$docker_latest" ]; then
echo " 最新标签: $docker_latest"
fi
else
echo -e " ${RED}❌ 未安装 Docker${NC}"
fi
echo "------------------------"
echo -e "${GREEN}检查完成!${NC}"
echo "提示: 可添加到 crontab 实现自动检查:"
echo " 0 9 * * * bash $(pwd)/$0"
使用方式
- 保存为
check-updates.sh - 赋予执行权限:
chmod +x check-updates.sh - 运行:
bash check-updates.sh - 定时执行:
crontab -e添加一行:0 9 * * * /bin/bash /home/你的用户名/check-updates.sh
脚本核心原理
-
获取当前版本:
- Windows:读取注册表
Uninstall键下的DisplayVersion - macOS/Linux:
--version命令输出、包管理器信息
- Windows:读取注册表
-
获取最新版本:
- 调用官方 API(JSON/XML)
- 解析 HTML 页面(用正则匹配版本号)
- 使用包管理器检查(
brew outdated/apt list --upgradable)
-
版本比较:
- 使用
[version]类型(Windows)或sort -V(Linux)进行语义化版本比较
- 使用
-
通知方式:
- Windows:
System.Windows.Forms.NotifyIcon气泡提示 - macOS/Linux:终端输出 + 可配合
notify-send命令
- Windows:
进阶用法(推荐工具)
如果不想自己写脚本,可以考虑现成的工具:
-
Windows:
- Winget(微软官方包管理器):
winget upgrade --all - Chocolatey:
choco outdated - Scoop:
scoop update *
- Winget(微软官方包管理器):
-
macOS:
brew update && brew outdated -
Linux: 各发行版包管理器自带更新通知
我的脚本可以作为一个定制化的补充 —— 如果你想监控某些特定软件(比如公司内网工具、没有上架包管理器的软件),这个模板会很实用。
需要我帮你适配某个具体软件的更新检查吗?告诉我应用名称,我可以添加对应的检测代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播