2015-04-20 2 views
1

Как бы удалить пользовательский запрос, чтобы «одобрить» все в этом сценарии .VBS и вместо этого просто разрешить автозапуск/установить все найденное?VBS Script для Windows Update

Подробнее о том, как работает скрипт:

Этот .vbs скрипт здесь работает на компьютере с ОС Windows, для поисковых запросов обновления Windows, а затем вручную попросить пользователя «хорошо» каждое обновление находит. Как только пользователь нажимает «okay» и принимает найденные обновления, он затем загружает его.

После загрузки файлов Widnows он снова просит пользователя утвердить каждую установку Windows Update. Что не автоматизировано ..... Я не знаком с .VBS, достаточным для редактирования этого скрипта.

Set updateSession = CreateObject("Microsoft.Update.Session") 
updateSession.ClientApplicationID = "MSDN Sample Script" 

Set updateSearcher = updateSession.CreateUpdateSearcher() 

WScript.Echo "Searching for updates..." & vbCRLF 

Set searchResult = _ 
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0") 

WScript.Echo "List of applicable items on the machine:" 

For I = 0 To searchResult.Updates.Count-1 
    Set update = searchResult.Updates.Item(I) 
    WScript.Echo I + 1 & "> " & update.Title 
Next 

If searchResult.Updates.Count = 0 Then 
    WScript.Echo "There are no applicable updates." 
    WScript.Quit 
End If 

WScript.Echo vbCRLF & "Creating collection of updates to download:" 

Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl") 

For I = 0 to searchResult.Updates.Count-1 
    Set update = searchResult.Updates.Item(I) 
    addThisUpdate = false 
    If update.InstallationBehavior.CanRequestUserInput = true Then 
     WScript.Echo I + 1 & "> skipping: " & update.Title & _ 
     " because it requires user input" 
    Else 
     If update.EulaAccepted = false Then 
      WScript.Echo I + 1 & "> note: " & update.Title & _ 
      " has a license agreement that must be accepted:" 
      WScript.Echo update.EulaText 
      WScript.Echo "Do you accept this license agreement? (Y/N)" 
      strInput = WScript.StdIn.Readline 
      WScript.Echo 
      If (strInput = "Y" or strInput = "y") Then 
       update.AcceptEula() 
       addThisUpdate = true 
      Else 
       WScript.Echo I + 1 & "> skipping: " & update.Title & _ 
       " because the license agreement was declined" 
      End If 
     Else 
      addThisUpdate = true 
     End If 
    End If 
    If addThisUpdate = true Then 
     WScript.Echo I + 1 & "> adding: " & update.Title 
     updatesToDownload.Add(update) 
    End If 
Next 

If updatesToDownload.Count = 0 Then 
    WScript.Echo "All applicable updates were skipped." 
    WScript.Quit 
End If 

WScript.Echo vbCRLF & "Downloading updates..." 

Set downloader = updateSession.CreateUpdateDownloader() 
downloader.Updates = updatesToDownload 
downloader.Download() 

Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl") 

rebootMayBeRequired = false 

WScript.Echo vbCRLF & "Successfully downloaded updates:" 

For I = 0 To searchResult.Updates.Count-1 
    set update = searchResult.Updates.Item(I) 
    If update.IsDownloaded = true Then 
     WScript.Echo I + 1 & "> " & update.Title 
     updatesToInstall.Add(update) 
     If update.InstallationBehavior.RebootBehavior > 0 Then 
      rebootMayBeRequired = true 
     End If 
    End If 
Next 

If updatesToInstall.Count = 0 Then 
    WScript.Echo "No updates were successfully downloaded." 
    WScript.Quit 
End If 

If rebootMayBeRequired = true Then 
    WScript.Echo vbCRLF & "These updates may require a reboot." 
End If 

WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)" 
strInput = WScript.StdIn.Readline 
WScript.Echo 

If (strInput = "Y" or strInput = "y") Then 
    WScript.Echo "Installing updates..." 
    Set installer = updateSession.CreateUpdateInstaller() 
    installer.Updates = updatesToInstall 
    Set installationResult = installer.Install() 

    'Output results of install 
    WScript.Echo "Installation Result: " & _ 
    installationResult.ResultCode 
    WScript.Echo "Reboot Required: " & _ 
    installationResult.RebootRequired & vbCRLF 
    WScript.Echo "Listing of updates installed " & _ 
    "and individual installation results:" 

    For I = 0 to updatesToInstall.Count - 1 
     WScript.Echo I + 1 & "> " & _ 
     updatesToInstall.Item(i).Title & _ 
     ": " & installationResult.GetUpdateResult(i).ResultCode 
    Next 
End If 
+1

вы имели в виду запустить его без эхо-сообщения? я имею в виду, что он не взаимодействует с пользователем? – Hackoo

+0

@Hackoo прямо сейчас этот скрипт взаимодействует с пользователем. Он просит пользователя «одобрить» каждое обновление. Что приводит к 30 всплывающих окон, я пытаюсь удалить взаимодействие с пользователями и позволить ему работать без одобрения. Просто авто-одобрите все найденное и установите его. Спасибо, что проверил это! – TechnicianOnline

+0

@Hackoo Я неправильно понял ваш вопрос. Я хочу, чтобы он работал без эхо-сообщения. Вы правы. Он взаимодействует, хотя я не хочу, чтобы он взаимодействовал. – TechnicianOnline

ответ

1
  1. Выход сценария с помощью метода WScript.Echo: run your script using the command-line-based script host (например Cscript.exe YourScript.vbs).
  2. Ввод пользователя: заменить strInput = WScript.StdIn.Readline на strInput = "Y" (все вхождения в ваш скрипт).
  3. Для ведения журнала обновлений: используйте Cscript.exe YourScript.vbs > YourLog.txt.

Объяснение:

  1. Используете ли вы WScript или CScript, вы по-прежнему запускать скрипты в том же порядке. Разница заключается только в выходе - WScript генерирует оконный вывод, а CScript отправляет свой вывод в командное окно, в котором он был запущен. При начальной установке основным хостом является WScript. Чтобы изменить его на CScript, введите в командной строке следующее: cscript //h:cscript.
  2. Я не использовал Cscript.exe YourScript.vbs < Prepared-Y.txt перенаправление: мы не знаем число Y строк во входном файле, поскольку мы не можем заранее оценить количество обновлений; может привести к ошибке Microsoft VBScript runtime error: Input past end of file
  3. Читать Redirection
+0

, это работает правильно, я использовал WScript для вывода. Спасибо за ваш труд! – TechnicianOnline