Le meilleur moyen de détecter si Windows a des mises à jour Windows prêtes à être téléchargées / installées?

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

  •  02-07-2019
  •  | 
  •  

Question

Je suis particulièrement intéressé par Windows 2000 / XP, mais Vista / 7 serait également intéressant (si différent).

Je réfléchissais à la tâche en planifiant quotidiennement un fichier de commandes ou l’équivalent.

EDIT: Désolé, j'aurais dû fournir plus d'informations. La question concerne 10 machines auxquelles j'applique manuellement les mises à jour. Je ne veux pas installer les mises à jour par programme, mais simplement savoir si des mises à jour sont prêtes à être téléchargées / installées (c'est-à-dire que l'icône du bouclier de mise à jour dans la barre d'état système l'indique) à l'aide d'un lot ou d'un script. Merci.

Était-ce utile?

La solution 6

En fin de compte, Windows SUS n'était pas une option. J'utilise ce qui suit dans une combinaison de fichiers batch avec ActiveState ActivePerl (recommandé):

perl -nle " imprimer $ _ si m / mises à jour détectées / i " < c: \ Windows \ WindowsUpdate.log

Cela peut être brut ou sale, et pourrait se casser à l'avenir, mais il fait actuellement ce dont j'ai besoin.

Merci pour toutes les idées.

Autres conseils

Vous pouvez utiliser 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 fonctionne très bien pour plusieurs ordinateurs d'un réseau .

Le " plus facile " Une façon de le savoir consiste à configurer les mises à jour Windows pour qu'elles se produisent la nuit et à télécharger les mises à jour, le cas échéant, qui placent l'icône du bouclier de mise à jour dans la barre d'état système. Il suffit de regarder le plateau pour voir si l’icône est présente.

Vous pouvez également configurer Windows pour vérifier les mises à jour tous les soirs, puis les télécharger et les installer à une heure précise.

En ce qui concerne ce que mdsindzeleta a dit - procéder de manière programmée n’est probablement pas la meilleure solution. J'utiliserais les fonctionnalités intégrées à Windows XP pour télécharger et installer les mises à jour. Je suppose que Vista a des fonctionnalités similaires.

Je pense que les mises à jour Windows sont téléchargées à l'aide du service BITS. Vous pouvez utiliser Bitsadmin.exe présent dans les outils de support Windows. À partir de la ligne de commande, vous pouvez exécuter bitsadmin.exe / list et voir l’état des travaux BITS. (progression du téléchargement, nom du travail, statut du travail)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top