【问题标题】:Uninstalling updates using wusa.exe使用 wusa.exe 卸载更新
【发布时间】:2017-10-19 21:19:07
【问题描述】:

我正在尝试编写一个用于卸载更新的 powershell 脚本。

我的问题是脚本在启动脚本时没有运行wusa.exe

function Uninstall-Hotfix () {
    [string]$parameters = "KB4041691"
    [string]$KBs = @()

    if ($parameters.Contains(":")) {
        [object]$arguments = $parameters.Split(":")
        foreach ($argument in $arguments) {
            $argument.Replace("KB", "")
            $KBs.add($argument)

            for ($i = 0; $i -lt $KBs.length; $i++) {
                Cmd /c wusa.exe /uninstall /KB:$KBs[$i] /quiet /norestart
                Do {
                    Start-Sleep -Seconds 3
                }
                while (Wait-Process | Where-Object {$_.name -eq "wusa"}) 

                If (Get-Hotfix -Id $KBs[$i] -ErrorAction SilentlyContinue) {
                    Write-Host "KB $KBs[$i] Fehlerhaft"
                }
                Else {
                    Write-Host "KB $KBs[$i] Erfolgreich deinstalliert"
                }
            }
        }
    }
    Else {
        $parameter = $parameters.Replace("KB", "")
        $parameter
        cmd /c wusa.exe /uninstall /KB:$parameter /quiet /norestart
        Do {
            Start-Sleep -Seconds 3
        }
        while (Wait-Process | Where-Object {$_.name -eq "wusa.exe"})
    }
}
Uninstall-Hotfix

【问题讨论】:

  • cmd 不是命令,请阅读错误消息。使用Start-process或直接调用wusa.exe
  • 试试& wusa.exe /uninstall /KB:$parameter /quiet /norestart
  • @guiwhatsthat:Powershell 没有显示错误,我看到其他脚本也使用“cmd”命令...
  • @JamesC.: 这也不起作用 :( ...我在事件查看器中看到他在应用程序中记录了语法错误,因为他无法读取 kb 编号...现在他没有记录错误,但它仍然没有运行或卸载更新......

标签: powershell windows-update


【解决方案1】:

你的代码很重,在我看来包含太多循环,你可以试试这个:

function Uninstall-Hotfix () {
    Param(
        [Parameter(Mandatory=$true)][array]$Patches
    )

    foreach($patch in $Patches){
        $numKb = $null
        if($patch -match "\d{7}"){
            [int]$numkb = $Matches[0]
            Write-Host $numKb

            Start-Process wusa.exe -ArgumentList "/KB:$numKb /uninstall /quiet /norestart" -Wait

            if(Get-Hotfix -Id $numKb -ErrorAction SilentlyContinue){
                Write-Host "KB $KBs[$i] Fehlerhaft"
            }
            else{
                Write-Host "KB $KBs[$i] Erfolgreich deinstalliert"
            }
        }
        else{
            Write-Host "KB is not valid"
        }
    }
}
Uninstall-Hotfix -Patches KB4041691,KB1234567

【讨论】:

  • 谢谢。但这仍然行不通。我发现当我不使用参数“/quiet”时,他会打开 wusa 并询问我是否要卸载它。当我使用“/quiet”参数时,他什么都不做,我也看不到 wusa 进程......有什么想法为什么这不起作用?到目前为止,谢谢。
  • 看来这不是 Powershell 问题。如果您使用的是 Windows 10,可以查看这篇文章:social.technet.microsoft.com/Forums/windows/en-US/…
  • 我们使用我们的远程监控和管理来推出脚本(所有机器都使用 Windows 7)但是当我不能使用“/quiet”开关时我们不能......我还发现当你使用“/uninstall /kb:..”开关时,你不能使用“/quiet”。但是当您使用“/uninstall ”开关时,您可以使用“/quiet”。但是这个 是什么意思呢?当您打开不带参数的 wusa.exe 时,它​​会显示可用的参数...
  • 但是这个 是什么意思? : wusa /uninstall /kb:{update ID}。你得到正确的命令。请参阅上面的链接,它可以帮助您。另一个链接:answers.microsoft.com/en-us/windows/forum/all/…
猜你喜欢
  • 2016-04-02
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多