搜来搜去都找不到现成的,只好用自己蹩脚的编程基础写一个。记录下
# 获取所有已安装软件的信息,并过滤包含"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 这个方法能获取对象。比较通用。程序员的世界,程序果真写的五花八门。