0

代码示例:

$UpdateSession = New-Object -ComObject 'Microsoft.Update.Session'

$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
$Updates = $UpdateSearcher.Search('IsInstalled=1')

$Updates | Where-Object { $_.Title -like '*KB2506143*' }

我正在尝试以编程方式卸载 WMF3,但在尝试使用 wusa.exe 时不断出现错误,

wusa /uninstall /kb:2506143 /quiet /norestart /log:C:\log.evt

CbsClient::CbsClient.00110: 未能创建 CBS 会话实例
CbsClient::CbsClient.00127: 退出并显示错误代码 0X80040154(未注册类)
UninstallWorker.00664: 开始搜索
CbsClient::OpenPackageByKB.00268: CBS 会话未初始化.
CbsClient::OpenPackageByKB.00320:退出,错误代码为 0X8000ffff(灾难性故障)
UninstallWorker.00667:失败:KB2506143 的 OpenPackageByKB()
UninstallWorker.00799:退出,错误代码为 0X8000ffff(灾难性故障)
RebootIfRequested.01446:未安排重新启动。IsRunWizardStarted:0,IsRebootRequired:0,RestartMode:1由于错误 2147549183“灾难性故障”(命令行:“ ”)
而无法卸载 Windows 更新C:\windows\System32\wusa.exe /uninstall /kb:2506143 /quiet /norestart /log:C:\log.evt
wWinMain.01962: 卸载更新失败;错误:0X8000ffff,灾难性故障。命令行:C:\windows\System32\wusa.exe /uninstall /kb:2506143 /quiet /norestart /log:C:\log.evt
wWinMain.01998:退出,错误代码为 0X8000ffff(灾难性故障)

所以我正在追求使用 WUA API。上面的代码片段给了我一个$Null回报,但我可以使用Get-Hotfix -ID KB2506143orGet-WmiObject -Class Win32_QuickFixEngineering -Filter 'HotFixID="KB2506143"'来查找更新。

这个问题类似,但是在找到补丁后尝试卸载补丁时访问被拒绝,而我的问题是:我如何首先找到补丁?

我不确定补丁是如何应用的,所以如果我在找到它后遇到同样的问题,至少我有这个解决方案。

4

1 回答 1

2

所以所有这一切的目的是以编程方式升级到 WMF5.1,我找到了我想要完成的解决方法。PowerShell v3 在构建过程中使用 DISM 在操作系统中启用,并且无法被 WUA 删除,因为它不是由 WUA 放置的。


解决方法 1:

dism.exe /Online /Disable-Feature:MicrosoftWindowsPowerShellV3

这会降级$PSVersionTablev2但不会删除补丁KB2506143。这导致需要通过 UI 手动卸载它,所以它并没有真正完成我需要的。


解决方法 2:

WMF3 不能升级到 WMF5,但可以升级到 WMF4,然后是 WMF5(.1)。

最终,我在 WMF3 上安装了 WMF4,wusa.exe同时仍然在 dism 中禁用了 v3,并在重新启动后成功地在 WMF4 上安装了 WMF5.1(再次,使用wusa.exe)。

该限制源于 WUA 无法管理未安装的补丁(通过 a.msu或 WSUS)

于 2017-12-06T21:23:14.557 回答