代码示例:
$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
无法卸载Windows更新,因为错误2147549183"灾难性故障" (命令行:"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 KB2506143
或Get-WmiObject -Class Win32_QuickFixEngineering -Filter 'HotFixID="KB2506143"'
来查找更新。
This question类似,但在找到补丁后尝试卸载补丁时会被拒绝访问,而我的问题是:如何在第一个补丁中找到补丁放置吗
我不确定修补程序是如何应用的,所以如果我找到它后遇到同样的问题,我至少会that resolution。
答案 0 :(得分:1)
所以这一切的目的是以编程方式升级到WMF5.1,并找到了我想要完成的工作的解决方法。 PowerShell v3在构建过程中使用DISM在操作系统中启用,并且无法由WUA删除,因为WUA没有将其放置在那里。
解决方法1:
dism.exe /Online /Disable-Feature:MicrosoftWindowsPowerShellV3
这会将$PSVersionTable
降级为v2
,但不会删除补丁KB2506143
。这导致需要手动通过UI手动卸载它,因此它并没有真正实现我的需要。
解决方法2:
WMF3无法升级到WMF5,但可以升级到WMF4,然后升级到WMF5(.1)。
最终,我使用wusa.exe
在WMF3上安装了WMF4,同时仍然在dism中禁用v3以获得良好的衡量标准,并且在重新启动后成功地在WMF4上安装WMF5.1(再次使用wusa.exe
)。
这种限制源于用水户协会无法管理未安装的补丁(通过.msu
或WSUS)