В VBScript мне нужен код для вычитания 1 из searchResult.Updates.Count, так что Count = 0 и WScript.Quit будут выполняться соответственно

Я уже много часов работал в Интернете, но не нашел ответа.

'ServerSelection values ssDefault = 0 ssManagedServer = 1 ssWindowsUpdate = 2 ssOthers = 3 'InStr values intSearchStartChar = 1 dim strTitle Set updateSession = CreateObject("Microsoft.Update.Session") Set updateSearcher = updateSession.CreateupdateSearcher() updateSearcher.ServerSelection = ssWindowsUpdate Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'") For I = 0 To searchResult.Updates.Count-1 Set update = searchResult.Updates.Item(I) If update.Title = "Intel Corporation driver update for Intel(R) HD Graphics" Then I need a code on this line to subtract 1 from searchResult.Updates.Count, so that Count = 0 and WScript.Quit will be run consequently. End If If searchResult.Updates.Count = 0 Then WScript.Quit End If set objShell = createobject("wscript.shell") objShell.Run("ms-settings:windowsupdate") , 0 Next WScript.Quit 

Вышеупомянутый VBScript проверяет наличие обновлений Windows. Я хочу удалить некоторые обновления, такие как обновления драйверов из searchResult.Updates.Count , чтобы searchResult.Updates.Count = 0 и WScript.Quit . Я хочу, чтобы он не предпринимал никаких действий при обнаружении указанных обновлений и предпринимал действия только при обнаружении других обновлений.

  • Запуск приложений как администратора по умолчанию в Windows 10
  • Является ли лицензия Windows 10 вечной или она устареет в 2025 году?
  • Windows 10 раз застряла в ботинке ПЕРЕД прокручиванием точек
  • Установка VirtualBox 5.0.10 на последнюю версию Windows 10 (версия 1511, 10586)
  • Остановка всех автоматических обновлений окон 10
  • ASUS BIOS сохраняет приоритет загрузки для Windows Boot Manager перед UEFI
  • 3 Solutions collect form web for “В VBScript мне нужен код для вычитания 1 из searchResult.Updates.Count, так что Count = 0 и WScript.Quit будут выполняться соответственно”

    Надеюсь это поможет:

     Dim nMyRes : nMyRes = 20 MsgBox "nMyRes before loop: " & nMyRes For i = 0 To nMyRes-1 If i = 5 Then nMyRes = nMyRes - 1 If i = 10 Then nMyRes = nMyRes - 1 Next MsgBox "nMyRes after loop: " & nMyRes 

    Этот фрагмент кода отлично работает. В вашем случае у вас есть объект (searchResult), и я не уверен, что вы можете его изменить. Вот почему я бы определил новую переменную и использовал ее так:

     Dim nMyNewvar : nMyNewvar = searchResult.Updates.Count - 1 ' ... ' ... For I = 0 To nMyNewvar ' ... If update.Title = "bla-bla" Then nMyNewvar = nMyNewvar - 1 

    [EDITED]

     ' Add this one row here Dim nMyNewvar : nMyNewvar = searchResult.Updates.Count - 1 'For I = 0 To searchResult.Updates.Count-1 For I = 0 To nMyNewvar Set update = searchResult.Updates.Item(I) If update.Title = "bla-bla" Then 'I need a code on this line to subtract 1 from .... nMyNewvar = nMyNewvar - 1 End If If nMyNewvar = 0 Then WScript.Quit End If set objShell = createobject("wscript.shell") objShell.Run("ms-settings:windowsupdate") , 0 Next 

    Изменить:

     If update.Title = "Intel Corporation driver update for Intel(R) HD Graphics" Then subtract 1 from searchResult.Updates.Count, so that Count = 0 and WScript.Quit will be run consequently. End If If searchResult.Updates.Count = 0 Then WScript.Quit End If 

    чтобы:

     If update.Title = "Intel Corporation driver update for Intel(R) HD Graphics" Then WScript.Quit End If 

    Тем не менее, похоже, что вы собираетесь добавить список вещей к этому. В этом случае логика ошибочна, так как она прекратит выполнение после обнаружения какой-либо одной вещи в списке. Вам нужно будет удалить элемент из фактического списка.

    Кроме того, вы также не можете просто изменить счетчик: это свойство только для чтения, которое задается объектом, и оно не будет удалять элемент из индекса. Вы также используете цикл for, используя его как предел.

    Лучший способ запустить цикл в наборе значений, которые вы также изменяете, – это использовать что-то вроде «while count> 0 do».

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

    Прочитав вышеприведенный ответ duDE, я придумал следующее:

     'ServerSelection values ssDefault = 0 ssManagedServer = 1 ssWindowsUpdate = 2 ssOthers = 3 'InStr values intSearchStartChar = 1 Dim strTitle Set updateSession = CreateObject("Microsoft.Update.Session") Set updateSearcher = updateSession.CreateupdateSearcher() updateSearcher.ServerSelection = ssWindowsUpdate Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'") If searchResult.Updates.Count = None Then WScript.Quit Else Dim value : value = searchResult.Updates.Count End If For I = 0 To searchResult.Updates.Count-1 Set update = searchResult.Updates.Item(I) 'The following excluded updates have to be hidden via 'Show or hide updates' beforehand. 'Otherwise, they will be downloaded and installed by Windows Update. If update.Title = "The full update title" Then Value = Value - 1 If update.Title = "The full update title" Then Value = Value - 1 If update.Title = "The full update title" Then Value = Value - 1 An_item = "KB2267602" Set Act=CreateObject("wscript.shell") If instr(update.Title, An_item) <> 0 Then Act.Run("""C:\Program Files\Windows Defender\MpCmdRun.exe"" ""-SignatureUpdate"""), 0 value = value - 1 End If Next If Value = 0 Then WScript.Quit End If result = MsgBox (_ "The number of available updates is(" & Value & ")." & vbNewLine &_ "Do you want to open【Windows Update】?", vbYesNo + vbQuestion,_ "【There are available updates.】") Select Case result Case vbYes Act.run("ms-settings:windowsupdate") Case vbNo WScript.Quit End Select 

    Это работает в моем конце. Диалоговое окно появится только в случае наличия доступных обновлений для исключения нежелательных. Скажите, пожалуйста, работает ли это в конце или может быть улучшено.

    Давайте будем гением компьютера.