2

我正在尝试调整此代码,使其强制 Windows 更新搜索从 Microsoft 而不是本地 WSUS 服务器在线检查。如果我在公司网络之外运行此代码,它可以正常工作,但我想从公司网络运行并绕过 WSUS 服务器。

    Private Sub CheckForUpdates()

    Dim objUpdateSession As WUApiLib.UpdateSession
    Dim objUpdateSearcher As WUApiLib.UpdateSearcher
    Dim objSearchResults As WUApiLib.ISearchResult
    Dim objUpdateDownloader As WUApiLib.UpdateDownloader
    Dim NowInstallThem As WUApiLib.UpdateInstaller
    Dim NumPatches As Integer = -1
    Dim Updates As New WUApiLib.UpdateCollection

    Try
        objUpdateSession = New WUApiLib.UpdateSession
        objUpdateSearcher = objUpdateSession.CreateUpdateSearcher()
        objSearchResults = objUpdateSearcher.Search("IsInstalled=0 and Type='Software'")
        NumPatches = objSearchResults.Updates.Count

        MessageBox.Show("Number of patches: " & NumPatches.ToString)
        Dim patch As WUApiLib.IUpdate

        For a = 0 To NumPatches - 1
            patch = objSearchResults.Updates.Item(a)
            Updates.Add(patch)
        Next

        If NumPatches > 0 Then
            objUpdateDownloader.Updates = Updates
            objUpdateDownloader.Download()
            MessageBox.Show("patches downloaded")

            NowInstallThem.Updates = Updates
            NowInstallThem.Install()
            MessageBox.Show("patches installed")
        End If

    Catch ex As Exception
    End Try
End Sub
4

2 回答 2

0

意识到这是一个老问题(有一个相当新的答案),这样做的方法是将(在初始示例中为实例)的ServerSelection属性设置为(2)。IUpdateSearcherobjUpdateSearcherssWindowsUpdate

于 2022-02-22T18:54:39.067 回答
0

这是由管理

UseWUServer

在客户端注册表项上

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  1. 保存键的值
  2. 将其设置为“0”
  3. 安装一个计时器,它会在 10 秒后重置值
  4. 立即运行您的搜索searchResult = updateSearcher.Search(...)

如果键或值不存在,则它已使用 Microsoft 更新服务器。

这有点hacky,但我找到的唯一方法。

于 2021-05-03T21:00:07.983 回答