使用PowerShell删除日期上的Windows更新包

时间:2017-11-15 14:56:51

标签: powershell

我有一项任务要求我删除特定日期的所有windowsupdatepackages。 我使用给定的KB编号一次制作一个脚本来删除一个包。我现在被困住了,不知道做了什么,这是我的代码:

function Uninstall-Hotfix {
    [cmdletbinding()]
    param(
        $computerName = $env:computername,
        [string] $hotFixId
    )

    $hotFixes = Get-WmiObject -ComputerName $computerName -Class Win32_QuickFixEngineering | select hotfixid

    $date = Get-Date  

    Write-Host "deleted on '$date'"

    if ($hotFixes -match $hotFixId) {
        $hotFixId = $hotFixId.Replace("KB", "")
        Write-Host "found hotfix" + $hotFixId
        Write-Host "Uninstalling the hotflix"
        $uninstallString = "cmd.exe /c      wusa.exe /uninstall /KB:$hotFixId /quiet /norestart"
        ([WMICLASS]"\\$computerName\ROOT\CIMV2:win32_process").Create($uninstallString) | out-null

        while (@(Get-Process wusa -ComputerName $computerName -ErrorAction SilentlyContinue).Count -ne 0) {
            Start-Sleep 3
            Write-Host "Waiting for update removal to finish ..."
        }
        Write-Host "Completed uninstalling of $hotFixId"
    }
    else {
        Write-Host "Given hotfix($hotFixId) not found"
        return
    }
}

1 个答案:

答案 0 :(得分:0)

不使用hotfixId字符串作为参数,而是使用日期对象作为输入参数。然后让函数将提供给函数的日期与$ hotfix的日期进行比较。 Win32_QuickFixEngineering类具有可用于此比较的InstalledOn属性。如果日期匹配,则卸载此修补程序。关于如何做到这一点的确切细节是你的功课,但如果你遇到一个特定的问题就会问另一个问题。

请参阅Win32_QuickFixEngineering类的文档:

https://msdn.microsoft.com/en-us/library/aa394391(v=vs.85).aspx