使用PowerShell

时间:2017-01-02 13:45:13

标签: powershell optimization

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

一开始?

3 个答案:

答案 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脚本等。