2017-01-02 97 views
1

我使用PowerShell腳本卸載軟件,刪除服務並刪除安裝文件夾。徹底清理。這個軟件有核心應用程序和11個插件。所以我使用這個代碼插件:加快PowerShell的卸載

$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" 

開頭?

+2

不要對此使用'Win32_Product'。 https://gregramsey.net/2012/02/20/win32_product-is-evil/。請參閱http://stackoverflow.com/questions/25268491/alternative-to-win32-product – restless1987

回答

3

的Win32_Product很慢,你可以利用這個註冊表路徑(HKLM:\ SOFTWARE \微軟\的Windows \ CurrentVersion \卸載)來獲取卸載命令,並運行它

+0

這工作得很好:) –

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 
} 
1

Win32_product壞了,不應該使用(甚至微軟寫了一些關於這個破損的WMI類的文章)。除了速度非常慢之外,它還會導致當前安裝的MSI軟件包出現問題,因爲它會強制重新註冊所有已註冊的MSI軟件包。 卸載軟件的最簡單方法是現在Powershell所需的狀態配置(注意,至少需要Windows 8.1才能完成)。使用DSC,您還可以更改服務行爲,刪除文件,安裝/卸載MSI軟件包,運行Powershell腳本等。

+0

謝謝你的信息!我們使用Win 7,所以Powershell希望的狀態配置在這裏沒有幫助。我們使用了很多MSI軟件包,所以我現在要撤銷這個腳本。 – Diodak