代码样本:
$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(灾难性故障)
出口 重新启动Queprequested.01446:未安排重新启动。IsrunwizardStarted:0,Isrebootrequired:0,RestartMode:1
由于错误2147549183"灾难性失败"(命令行:"C:windowsSystem32wusa.exe /uninstall /kb:2506143 /quiet /norestart /log:C:log.evt
")
无法卸载Windows更新。 wwinmain.01962:无法卸载更新;错误:0x8000FFFF,灾难性失败。命令行:C:windowsSystem32wusa.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"'
查找更新。
这个问题是相似的,但是在找到补丁后,它在找到该补丁后被拒绝了,而我的问题是:我首先如何找到补丁程序? <</strong> <</p>
我不确定该补丁是如何应用的,因此,如果我发现它一旦遇到了同一问题,我至少拥有该分辨率。
因此,所有这些的目的是以编程方式升级到WMF5.1,我为自己想完成的工作找到了解决方法。PowerShell V3在构建过程中使用DISM在OS中启用,WUA无法将其删除,因为WUA并未将其放置。
解决方案1:
dism.exe /Online /Disable-Feature:MicrosoftWindowsPowerShellV3
这将$PSVersionTable
降级到v2
,但不会删除补丁KB2506143
。这会导致需要手动通过UI卸载它,因此它并没有真正完成我的需求。
解决方案2:
WMF3不能升级到WMF5,但是它可以将升级到WMF4,然后升级WMF5(.1)。
最终,我使用wusa.exe
在WMF3上安装了WMF4,同时仍使V3保持良好的方式,并在重新启动后成功地通过WMF4安装WMF5.1(再次使用wusa.exe
)。
限制扎根于WUA无法管理未安装的补丁(通过.msu
或WSUS)