Лучший способ определить, есть ли в Windows обновления Windows, готовые к загрузке/установке?

StackOverflow https://stackoverflow.com/questions/121585

  •  02-07-2019
  •  | 
  •  

Вопрос

Меня особенно интересует Windows 2000/XP, но Vista/7 тоже была бы интересна (если она отличается).

Я думал о ежедневном планировании задач для пакетного файла или его эквивалента.

РЕДАКТИРОВАТЬ:Извините, я должен был предоставить больше информации.Вопрос касается 10 машин, на которые я вручную устанавливаю обновления.Я не хочу устанавливать обновления программно, а просто узнаю, есть ли обновления, готовые к загрузке/установке (т.об этом свидетельствует значок щита обновления на панели задач) с использованием пакета или сценария.Спасибо.

Это было полезно?

Решение 6

В конце концов, Windows SUS не был вариантом, поэтому я использую следующее в пакетном файле вместе с АктивСтате АктивПерл (рекомендуемые):

perl -nle "вывести $_, если обнаружены m/updates/i" < c:\Windows\WindowsUpdate.log

Это может быть грубо или грязно и может сломаться в будущем, но в настоящее время это делает то, что мне нужно.

Спасибо за все идеи.

Другие советы

Вы могли бы использовать WUApiLib:

UpdateSessionClass session = new UpdateSessionClass();

IUpdateSearcher search = session.CreateUpdateSearcher();

ISearchResult result = search.Search("IsInstalled=0 and IsPresent=0 and Type='Software'");

int numberOfUpdates = result.Updates.Count - 1;

Log.Debug("Found " + numberOfUpdates.ToString() + " updates");

UpdateCollection updateCollection = new UpdateCollection();

for (int i = 0; i < numberOfUpdates; i++)
{
    IUpdate update = result.Updates[i];

    if (update.EulaAccepted == false)
    {
        update.AcceptEula();
    }

    updateCollection.Add(update);
}

if (numberOfUpdates > 0)
{
    UpdateCollection downloadCollection = new UpdateCollection();

    for (int i = 0; i < updateCollection.Count; i++)
    {
        downloadCollection.Add(updateCollection[i]);
    }

    UpdateDownloader downloader = session.CreateUpdateDownloader();

    downloader.Updates =  downloadCollection;

    IDownloadResult dlResult = downloader.Download();

    if (dlResult.ResultCode == OperationResultCode.orcSucceeded)
    {
        for (int i = 0; i < downloadCollection.Count; i++)
        {
            Log.Debug(string.Format("Downloaded {0} with a result of {1}", downloadCollection[i].Title, dlResult.GetUpdateResult(i).ResultCode));
        }

        UpdateCollection installCollection = new UpdateCollection();

        for (int i = 0; i < updateCollection.Count; i++)
        {
            if (downloadCollection[i].IsDownloaded)
            {
                installCollection.Add(downloadCollection[i]);
            }
        }

        UpdateInstaller installer = session.CreateUpdateInstaller() as UpdateInstaller;

        installer.Updates = installCollection;

        IInstallationResult iresult = installer.Install();

        if (iresult.ResultCode == OperationResultCode.orcSucceeded)
        {
            updated = installCollection.Count.ToString() + " updates installed";

            for (int i = 0; i < installCollection.Count; i++)
            {
                Log.Debug(string.Format("Installed {0} with a result of {1}", installCollection[i].Title, iresult.GetUpdateResult(i).ResultCode));
            }

            if (iresult.RebootRequired == true)
            {
                ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");

                foreach (ManagementObject shutdown in mcWin32.GetInstances())
                {
                    shutdown.Scope.Options.EnablePrivileges = true;
                    shutdown.InvokeMethod("Reboot", null);
                }
            }
        }

Windows SUS работает очень хорошо для нескольких машин в сети.

Самый «простой» способ узнать это — настроить обновления Windows на ночное обновление и загрузить обновления, если они доступны, после чего на панели задач появится значок щита обновлений.Просто взгляните на трей, чтобы увидеть, присутствует ли значок.

Вы также можете настроить Windows на еженощную проверку обновлений, а затем загружать и устанавливать их в указанное время.

Что касается того, что сказал mdsindzeleta, делать это программно, вероятно, не лучшее решение.Я бы использовал функции, встроенные в Windows XP, для загрузки и установки обновлений.Я предполагаю, что Vista имеет аналогичные функции.

Я считаю, что обновления Windows загружаются с помощью службы BITS.Вы можете использовать Bitsadmin.exe, который находится в инструментах поддержки Windows.Из командной строки вы можете запустить bitsadmin.exe /list и просмотреть состояние заданий BITS.(т.е.ход загрузки, имя задания, статус задания)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top