2017-07-25 34 views
0

我遇到了下面的腳本有問題。儘管它表示在運行期間它是成功的,但應用程序仍然存在於操作系統中。 DISM日誌文件也沒有幫助。For循環DISM在Windows 10中刪除不需要的應用程序

# Remove non-corporate apps 
$AppsList = "Microsoft.3DBuilder",` 
      "Microsoft.Advertising.Xaml",` 
      "Microsoft.Messaging",` 
      "Microsoft.Microsoft3DViewer",` 
      "Microsoft.Messaging",` 
      "Microsoft.MicrosoftOfficeHub",` 
      "Microsoft.MicrosoftSolitaireCollection",` 
      "Microsoft.Office.OneNote",` 
      "Microsoft.OneConnect",` 
      "Microsoft.People",` 
      "Microsoft.SkypeApp",` 
      #"Microsoft.StorePurchaseApp",` 
      "Microsoft.Wallet",` 
      "Microsoft.XboxApp",` 
      "Microsoft.XboxGameOverlay",` 
      "Microsoft.XboxIdentityProvider",` 
      "Microsoft.XboxSpeechToTextOverlay",` 
      "Microsoft.ZuneMusic",` 
      "Microsoft.ZuneVideo",` 
      #"Microsoft.WindowsStore",` 
      "microsoft.windowscommunicationsapps",` 
      "Microsoft.WindowsPhone",` 
      "Microsoft.Office.Sway",` 
      "Microsoft.ConnectivityStore",` 
      "Microsoft.CommsPhone",` 
      "Microsoft.BingFinance" 

ForEach ($app in $AppsList){ 
$variable = DISM /Online /Get-ProvisionedAppxPackages | select-string Packagename 
$variable2 = $variable -replace "PackageName : ", "" 
} 

$variable2| % {DISM /Online /Remove-ProvisionedAppxPackage /PackageName:$_} 
+0

因爲每次運行第一個循環時都會覆蓋'$ variable2'。您也從不檢查包名稱與$ app變量。最後,我建議使用'Get/Remove-AppxProvisionedPackage' cmdlet而不是dism –

回答

0

我會使用Remove-AppxProvisionedPackage代替DISM

​​
+0

謝謝大家的意見,所提供的解決方案適用於Windows 10是未安裝配置文件的機器上的全新安裝。但是,如果使用現有配置文件就地升級,則remove-AppxProvisionedPackage不適用於之前登錄的所有用戶。DISM適用於現有用戶和新用戶。 – Abs

+0

你應該能夠用'DISM/Online/Remove-ProvisionedAppxPackage/PackageName:$ app'代替'Remove-AppxProvisionedPackage'命令。 –

+0

DISM/Online/Remove-ProvisionedAppxPackage/PackageName:$ app不起作用,因爲我得到一個錯誤87參數不正確。 DISM日誌狀態無法確定軟件包全名是否代表軟件包。 – Abs

1

從當前用戶刪除應用:

ForEach ($app in $AppsList) 
{ 
    Get-AppxPackage -Name $app | Remove-AppxPackage 
} 

要從新的用戶登錄到系統中使用的應用程序,但不從現有用戶移除:

ForEach ($app in $AppsList) 
{ 
Get-AppXProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $app } | Remove-AppxProvisionedPackage -Online 
} 
+0

感謝馬爾科姆,不過正如前面提到的,我正在使用DISM解決方案來迎合現有用戶和新用戶的就地升級。此解決方案不適用於安裝現有用戶配置文件的就地升級。 – Abs

+1

@Abs這是正確的答案,使用'dism/Remove-ProvisionedAppxPackage'將只從Package Store中刪除軟件包,功能上與Remove-AppxProvisionedPackage相同。實際上'Remove-AppxProvisionedPackage'是一個'Dism' cmdlet。沒有'Remove-AppxPackage'的'Dism.exe'等效開關,因爲該軟件包不在CBS存儲區中,而是位於用戶的配置文件中。 ' – BenH

+0

爲了迎合現有用戶,您需要以用戶身份運行Remove-AppxPackage,您可以通過登錄時的計劃任務或您選擇的其他方法來執行此操作。 –