利用 PowerShell 脚本批量卸载软件

搜来搜去都找不到现成的,只好用自己蹩脚的编程基础写一个。记录下

# 获取所有已安装软件的信息,并过滤包含"chrone"关键字的软件
$products = Get-WmiObject Win32_Product | Where-Object {$_.Name -like "*chrome*" -or $_.Caption -like "*chrome*"}

# 如果找到匹配的软件,则直接进行卸载
if ($products) {
    Write-Host "正在卸载包含'chrome'关键字的软件..."

    foreach ($product in $products) {
        $msiexecCommand = "{0}" -f $product.IdentifyingNumber
        Write-Output $msiexecCommand
        try {
            & msiexec.exe /x "`"$msiexecCommand`"" /qn
            Write-Host "已成功卸载:$($product.Name)"
        } catch {
            Write-Host "卸载 $($product.Name) 失败:$($_.Exception.Message)"
        }
    }
} else {
    Write-Host "未找到包含'chrome'关键字的软件。"
}

其实我也写了其他写法,比如通过注册表获取程序列表。

# 获取所有安装的程序
$programs = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', Directory, DisplayName, Publisher -ErrorAction SilentlyContinue

# 筛选出包含 "Check Point" 的程序
$unPrograms = $programs | Where-Object { $_.DisplayName -like "*RealVNC*" -or $_.Publisher -like "*RealVNC*" }

# 输出结果
if ($unPrograms) {
    Write-Host "找到以下包含 'RealVNC' 的软件:"
    $unPrograms | Format-Table DisplayName, Publisher -AutoSize
    

} else {
    Write-Host "未找到包含 'RealVNC' 的软件。"
}

但是注册表很多软件不会写入进去,导致根本没有相关信息。反倒是 Get-WmiObject Win32_Product 这个方法能获取对象。比较通用。程序员的世界,程序果真写的五花八门。

Ubuntu 自启动添加路由 2024最新教程

网上的帖子也不知道过时几百年了,自己贴一个记下来。

Ubuntu 开始推行什么都是服务的形式,搞得及其麻烦。你要了解各种服务的特性。比如在什么之前启动,之后启动。

[Unit]
Description=xxxx  
# 这里你自定义即可

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sh -c ' until ping -c1 8.8.8.8; do sleep 5; done;if ip route show | grep -q "192.168.1.0/24 via 172.16.1.4"; then ip route del 192.168.1.0/24 via 172.16.1.4; fi'
# 这样设置更加完善,如果存在类似路由,则删除再添加。


# 这里添加你要的路由命令或者其他命令
ExecStart=/sbin/ip rule add fwmark 0x1 table 100 ; \ 
/sbin/ip -6 rule add fwmark 0x2 table 110 ; \
/sbin/ip route add local 0.0.0.0/0 dev lo table 100 ; \
/sbin/ip route add local 0.0.0.0/0 dev lo table 110 ; \
/sbin/ip -6 route add local ::/0 dev lo table 100 ; \
/sbin/ip -6 route add local ::/0 dev lo table 110 ;

ExecStop=/sbin/ip rule del fwmark 0x1 table 100 ; \
/sbin/ip -6 rule del fwmark 0x2 table 110 ; \
/sbin/ip route del local 0.0.0.0/0 dev lo table 100 ; \
/sbin/ip route del local 0.0.0.0/0 dev lo table 110 ; \
/sbin/ip -6 route del local ::/0 dev lo table 100 ; \
/sbin/ip -6 route del local ::/0 dev lo table 110 ;

[Install]
WantedBy=multi-user.target

这样路由就会自动添加了,不用每次写。

记得 sudo systemctl daemon-reload 重载哦!