Рейтинг:0

Метод WUA IUpdateSearcher::Search зависает только на одном из моих серверов

флаг th

Сведения о системе: Редакция = Windows Server 2019 Standard, Версия = 1809, Сборка ОС = 17763.2114

Мой код:
  - $UpdateSession = New-Object -ComObject Microsoft.Update.Session
  - $UpdateServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager
  - $UpdateService = $UpdateServiceManager.AddScanPackageService("Автономная служба синхронизации", $CabPath, 1)
  - $UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
  - $UpdateSearcher.ServerSelection = 3
  - $UpdateSearcher.ServiceID = $UpdateService.ServiceID.ToString()
  *ВИСИТ ЗДЕСЬ* - $Missing = $UpdateSearcher.Search("IsInstalled=0")

Сценарий PS отлично работает на нескольких других серверах с 2012 R2, 2016 и 2019; но от этого у меня голова болит. Как только он начинает поиск, -Verbose прекращает вывод (с помощью Set-PSDebug -Trace 2).Этот метод поиска занял от 3 до 15 минут в других системах, но даже через 24 часа он все еще находится на этой строке.

В другом потоке, представленном ниже, я нашел, что может быть решением, но мне нужно знать, как включить функцию поиска в асинхронный режим во время поиска. Или есть другой способ отладить метод этого API? WSUS не мог получать обновления с серверов, а некоторые серверы не распознавались AD или DNS, поэтому я использовал сценарий API WUA для поиска в автономном режиме.

Предыдущий пост от Elliot Labs LLC >>

Я разговаривал с менеджером Microsoft, отвечающим за Центр обновления Windows. (Дэйв Рот), и он сказал, что вы ни в коем случае не должны пытаться получить статус Центра обновления Windows через реестр. Он сказал, что вы должны использовать COM API, чтобы получить статус, выполнив метод поиска и используя возвращенные результаты для состояния обновления вашего компьютера.

Он также дал мне этот совет:

Как простой FYI, для проверки того, какие обновления установлены, вызывая IUpdateSearcher::Search с IsInstalled=1 создаст объект updatecollection, содержащий все установленные обновления. Ты можешь ходить через него посмотреть, что уже установлено.

Расширяя его совет, вы потенциально можете вызвать этот метод с помощью IsInstalled=0, чтобы увидеть, какие обновления не установлены. (см. пример PowerShell ниже).

COM-API

COM API — это хороший способ прямого доступа к Центру обновления Windows без приходится разбирать логи. Приложения этого API варьируются от поиска доступные обновления на компьютере для установки и удаления обновления.

Вы можете использовать класс Microsoft.Update.Session для запуска обновления. выполните поиск, а затем подсчитайте количество доступных обновлений, чтобы увидеть, есть ли есть какие-либо обновления для компьютера.

Пример PowerShell:

$updateObject = New-Object -ComObject Microsoft.Update.Session $updateObject.ClientApplicationID = "Пример сценария сбоя сервера" $updateSearcher = $updateObject.CreateUpdateSearcher() $searchResults = $updateSearcher.Search("IsInstalled=0") Write-Host $searchResults.Updates.Count Если возвращаемый результат больше 0 то есть обновления для компьютера, которые нужно установить и/или скачанный. Вы можете легко обновить сценарий powershell, чтобы он соответствовал ваше приложение.

Просто напомню, что функция поиска не является асинхронной, поэтому она заморозит ваше приложение во время поиска. В таком случае вы захочет сделать это асинхронным.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.