Использование подстановочного знака в командном файле с функцией dism - PullRequest
0 голосов
/ 25 апреля 2018

Как мне использовать для этого подстановочный знак:

dism /online /remove-package /PackageName:Package_for_KB2952664~31bf3856ad364e35~amd64~~6.1.16.0

Я пробовал это:

dism /online /remove-package /PackageName:Package_for_KB2952664~31bf3856ad364e35~amd64~~6.*.*.*

1 Ответ

0 голосов
/ 26 апреля 2018

Нельзя использовать подстановочные знаки в аргументе /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 команда для каждой установленной версии пакета, указанного в регулярном выражении.

...