如何写一个脚本自动卸载软件

wen 实用脚本 3

本文目录导读:

如何写一个脚本自动卸载软件

  1. Windows PowerShell脚本
  2. Windows批处理脚本
  3. Linux Shell脚本
  4. macOS脚本
  5. 高级批量卸载脚本
  6. 使用注意事项

Windows PowerShell脚本

通过程序和功能卸载

# 卸载指定软件
$softwareName = "软件名称"  # 修改为要卸载的软件名
# 获取已安装程序
$apps = Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -like "*$softwareName*"}
foreach ($app in $apps) {
    Write-Host "正在卸载: $($app.Name)"
    $app.Uninstall() | Out-Null
}

通过注册表卸载(更可靠)

# 通过注册表查找并卸载
$softwareName = "软件名称"
# 搜索注册表
$paths = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
foreach ($path in $paths) {
    Get-ItemProperty $path | Where-Object {$_.DisplayName -like "*$softwareName*"} | ForEach-Object {
        $uninstallString = $_.UninstallString
        if ($uninstallString) {
            Write-Host "卸载: $($_.DisplayName)"
            Start-Process cmd.exe -ArgumentList "/c $uninstallString /quiet /norestart" -Wait
        }
    }
}

Windows批处理脚本

@echo off
setlocal enabledelayedexpansion
set "SOFTWARE_NAME=软件名称"
echo 正在搜索并卸载 %SOFTWARE_NAME%...
:: 方法1:使用wmic
wmic product where "name like '%%%SOFTWARE_NAME%%%'" call uninstall /nointeractive
:: 方法2:卸载指定软件(直接指定GUID)
:: msiexec /x {GUID-CODE} /quiet /norestart
echo 卸载完成!
pause

Linux Shell脚本

针对不同发行版

#!/bin/bash
# 配置要卸载的软件包名称
PACKAGE_NAME="软件包名"
echo "正在卸载 $PACKAGE_NAME..."
# 检测使用的包管理器并卸载
if command -v apt &> /dev/null; then
    # Debian/Ubuntu
    sudo apt remove -y "$PACKAGE_NAME"
    sudo apt autoremove -y
elif command -v yum &> /dev/null; then
    # CentOS/RHEL 7
    sudo yum remove -y "$PACKAGE_NAME"
elif command -v dnf &> /dev/null; then
    # Fedora/RHEL 8+
    sudo dnf remove -y "$PACKAGE_NAME"
elif command -v pacman &> /dev/null; then
    # Arch Linux
    sudo pacman -Rns --noconfirm "$PACKAGE_NAME"
elif command -v zypper &> /dev/null; then
    # openSUSE
    sudo zypper remove -y "$PACKAGE_NAME"
elif command -v brew &> /dev/null; then
    # macOS Homebrew
    brew uninstall "$PACKAGE_NAME"
else
    echo "未识别的包管理器"
    exit 1
fi
echo "卸载完成!"

macOS脚本

#!/bin/bash
# 卸载通过Homebrew安装的软件
function uninstall_brew() {
    if brew list "$1" &>/dev/null; then
        echo "通过Homebrew卸载 $1..."
        brew uninstall "$1"
    fi
}
# 卸载通过App Store安装的软件
function uninstall_mas() {
    if command -v mas &>/dev/null; then
        local app_id=$(mas list | grep "$1" | awk '{print $1}')
        if [ ! -z "$app_id" ]; then
            echo "通过Mac App Store卸载 $1..."
            sudo mas uninstall "$app_id"
        fi
    fi
}
# 手动卸载应用程序(从Applications目录)
function uninstall_app() {
    local app_path="/Applications/$1.app"
    if [ -d "$app_path" ]; then
        echo "正在卸载 $1..."
        sudo rm -rf "$app_path"
        # 清理配置文件
        rm -rf "$HOME/Library/Preferences/$1*"
        rm -rf "$HOME/Library/Application Support/$1*"
        rm -rf "$HOME/Library/Caches/$1*"
    fi
}
# 使用示例
uninstall_brew "firefox"
# uninstall_mas "Xcode"
# uninstall_app "SomeApp"

高级批量卸载脚本

# batch_uninstall.ps1
param(
    [string]$SoftwareListFile = "software_list.txt",
    [switch]$Quiet = $true
)
# 读取要卸载的软件列表
$toUninstall = Get-Content $SoftwareListFile
foreach ($software in $toUninstall) {
    if ([string]::IsNullOrWhiteSpace($software)) { continue }
    Write-Host "正在处理: $software"
    # 查找软件
    $apps = Get-WmiObject -Class Win32_Product | Where-Object {
        $_.Name -like "*$software*"
    }
    if ($apps.Count -eq 0) {
        Write-Host "未找到: $software" -ForegroundColor Yellow
        continue
    }
    foreach ($app in $apps) {
        try {
            if ($Quiet) {
                $app.Uninstall() | Out-Null
            } else {
                $result = $app.Uninstall()
            }
            Write-Host "成功卸载: $($app.Name)" -ForegroundColor Green
        } catch {
            Write-Host "卸载失败: $($app.Name) - $_" -ForegroundColor Red
        }
    }
}

使用注意事项

  1. 管理员权限:大多数卸载操作需要管理员权限
  2. 测试环境:先在测试环境验证脚本
  3. 备份数据:卸载前确认是否需要保留用户数据
  4. 静默卸载参数:不同软件的静默卸载参数可能不同
  5. 日志记录:建议添加日志功能追踪卸载过程

需要根据具体软件和操作系统调整脚本,特别是静默卸载的参数。

抱歉,评论功能暂时关闭!