Il modo migliore per rilevare se Windows ha gli aggiornamenti di Windows pronti per il download / l'installazione?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Sono particolarmente interessato a Windows 2000 / XP, ma anche Vista / 7 sarebbe interessante (se diverso).

Stavo pensando sulla falsa riga delle attività pianificando un file batch o equivalente su base giornaliera.

EDIT: mi dispiace, avrei dovuto fornire maggiori informazioni. La domanda riguarda 10 macchine alle quali applico manualmente gli aggiornamenti. Non voglio installare gli aggiornamenti a livello di codice, ma scopro solo se ci sono aggiornamenti pronti per il download / installazione (ovvero l'icona dello scudo di aggiornamento nella barra delle applicazioni indica questo) utilizzando un batch o uno script. Grazie.

È stato utile?

Soluzione 6

Alla fine, Windows SUS non era un'opzione , quindi sto usando quanto segue in un file batch insieme a ActiveState ActivePerl (consigliato):

perl -nle " stampa $ _ se m / aggiornamenti rilevati / i " lt &; c: \ Windows \ WindowsUpdate.log

Potrebbe essere grezzo o sporco, e potrebbe rompersi in futuro, ma attualmente fa ciò di cui ho bisogno.

Grazie per tutte le idee.

Altri suggerimenti

Puoi usare 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 funziona molto bene con diverse macchine su una rete .

Il " il più semplice " il modo per dirlo è configurare gli aggiornamenti di Windows in modo che si verifichino ogni notte e scaricare gli aggiornamenti, se disponibili, che mette quindi l'icona dello scudo di aggiornamento nell'area di notifica. Basta dare un'occhiata al vassoio per vedere se l'icona è presente.

Puoi anche configurare Windows per controllare gli aggiornamenti ogni notte, quindi scaricarli e installarli a un'ora specificata.

Riguardo a ciò che ha detto mdsindzeleta, fare questo programmaticamente probabilmente non è la soluzione migliore. Vorrei utilizzare le funzionalità integrate in Windows XP per scaricare e installare gli aggiornamenti. Suppongo che Vista abbia funzionalità simili.

Credo che gli aggiornamenti di Windows vengano scaricati utilizzando il servizio BITS. È possibile utilizzare Bitsadmin.exe che si trova negli Strumenti di supporto di Windows. Dalla riga di comando è possibile eseguire bitsadmin.exe / list e vedere lo stato dei lavori BITS. (ad es. avanzamento del download, nome del lavoro, stato del lavoro)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top