我使用PowerShell脚本卸载软件,删除服务并删除安装文件夹。全面清理。该软件具有核心应用程序和11个插件。所以我将此代码用于插件:
$appAddIns = @(Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "SE0008*" })
foreach ($appAddIn in $appAddIns)
{
Write-Host "Uninstalling: " $appAddIn.Name
$appAddIn.Uninstall() | out-null
}
但即使启动剧本也非常缓慢。我跑了,它只是空白。我的同事在工作中没有使用我的脚本,因为10秒后他认为它没有工作并终止它。
有没有办法更好地写它,或者只是添加:
Write-Host "Sit and wait you impatient bastard"
一开始?
答案 0 :(得分:3)
win32_product很慢,您可以利用此注册表路径(HKLM:\ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall)来获取卸载命令并运行它
答案 1 :(得分:2)
您可以使用Write-Progress
,然后使用要卸载的程序的名称更新它,并根据要卸载的程序数量计算百分比。
以下是一个例子:
Write-Progress -Activity "Uninstalling programs..."
for ($i = 1; $i -le 5; $i++) {
Write-Progress -Activity "Uninstalling programs..." -Status "Program $i" -PercentComplete ($i / 5 * 100)
Start-Sleep -Seconds 1
}
答案 2 :(得分:1)
Win32_product已损坏,不应使用(即使Microsoft写了一些关于这个破坏的WMI类的文章)。除了它非常慢,它还会导致当前安装的MSI包出现问题,因为它强制重新注册所有已注册的MSI包。 卸载软件的最简单方法是现在的Powershell Desired State Configuration(请注意,至少需要Windows 8.1)。使用DSC,您还可以更改服务行为,删除文件,安装/卸载MSI包,运行Powershell脚本等。