Нельзя использовать подстановочные знаки в аргументе /PackageName
.Вы можете получить полный список пакетов, найти в результирующем наборе нужные вам пакеты, а затем выполнить команду удаления для каждого результата.
Сначала получите все пакеты:
$packages = dism /online /Get-Packages
Затем найдите только те пакеты, которые вас интересуют, с помощью регулярного выражения:
$matched_packages = $packages | Select-String "Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$"
В приведенной выше команде регулярное выражение Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$
можно изменить на более подходящее регулярное выражение для поиска, если это необходимо.
Затем отфильтруйте только значения из совпадений, чтобы упростить их повторение:
$matched_values = $matched_packages | ForEach-Object { $_.Matches[0].Value }
Наконец, для каждого совпадения выполните команду remove-package
:
$matched_values | % {dism /online /remove-package /PackageName:$_}
Вы можете сделать его однострочным, если вы предпочитаете:
dism /online /Get-Packages | Select-String "Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$" | ForEach-Object { $_.Matches[0].Value } | % {dism /online /remove-package /PackageName:$_}
Может быть более простой способ построения этих команд (мой PowerShell немного ржавый), но приведенные выше примеры будут выполнятьremove-package
команда для каждой установленной версии пакета, указанного в регулярном выражении.