使用PowerShell加快卸载速度

使用PowerShell加快卸载速度,powershell,optimization,Powershell,Optimization,我使用PowerShell脚本卸载软件、删除服务和删除安装文件夹。彻底清理。该软件有核心应用程序和11个附加模块。因此,我将此代码用于加载项: $appAddIns = @(Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "SE0008*" }) foreach ($appAddIn in $appAddIns) { Write-Host "Uninstalling: " $appA

我使用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"

开始时?

您可以使用
写入进度
,然后使用您要卸载的程序的名称和基于要卸载的程序数量计算的百分比对其进行更新

以下是一个例子:

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
}

win32_产品速度较慢,您可以利用此注册表路径(HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall)获取卸载命令并运行它

win32_产品已损坏,不应使用(甚至Microsoft也写了一些关于此损坏的WMI类的文章)。除了速度非常慢之外,它还导致当前安装的MSI软件包出现问题,因为它强制在所有已注册的MSI软件包上重新注册。
卸载软件的最简单方法是现在的Powershell所需状态配置(请注意,您至少需要Windows 8.1才能完成此操作)。使用DSC,您还可以更改服务行为、删除文件、安装/卸载MSI软件包、运行Powershell脚本等。

不要为此使用
Win32_产品
。谢谢你提供的信息!我们使用Win 7,因此Powershell所需的状态配置在这里没有帮助。我们使用了很多MSI软件包,所以我现在就收回这个脚本。