2011-10-29 76 views
1

我是PowerShell的新手,我正在尋找一種方法來卸載多個應用程序。我有一個我想要卸載的文本文件中的應用程序列表。下面的代碼我到目前爲止:powershell卸載多個應用程序?

# Retrieve names of all softwares to un-install and places in variable $app 

$App = Get-Content "C:\temp\un-installApps.txt" 

# Cycle through each of the softwares to un-install and store in the WMI variable 

Foreach ($AppName in $App) 
{ 
    $AppTmp = Get-WmiObject -query "Select * from win32_product WHERE Name like" + $AppName 
    $AppNames = $AppNames + $AppTmp 
} 

foreach ($Application in $AppNames) 
{ 
    msiexec /uninstall $Application.IdentifyingNumber 
} 

以下行導致問題

$AppTmp = Get-WmiObject -query "Select * from win32_product WHERE Name like" + $AppName 
$AppNames = $AppNames + $AppTmp" 

任何想法如何,我可以得到這個工作?

回答

3

我認爲這是因爲在like和應用程序名稱之間沒有空格,並且需要圍繞應用程序名稱使用單引號。該部分應該看起來像like '" + $AppName + "'"

但是,你可以做整個腳本更簡單地是這樣的:

$App = Get-Content "C:\temp\un-installApps.txt" 

gwmi win32_product| 
    where { $App -contains $_.Name }| 
    foreach { $_.Uninstall() } | out-null 
+0

虛空引起了我的問題,所以我用這個: $應用=獲取內容「C:\ TEMP \未installApp .txt「 gwmi win32_product |其中{$ App -contains $ _。Name} | foreach {$ _。Uninstall()} – resolver101

+0

試用@manojlds編輯。如果我用管道包裹了管道,'[void]'會起作用。 – Rynant

+0

有沒有「不要重啓」通用命令行標誌?或者是那個程序特定的? (腳本正在工作,但是當我不期待它時,它重新啓動了我的機器!) – granadaCoder