1

我将如何为此使用通配符:

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.*.*.*
4

1 回答 1

1

您不能在/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正则表达式中指定的每个已安装版本的包执行命令。

于 2018-04-25T22:16:49.247 回答