Le meilleur moyen de détecter si Windows a des mises à jour Windows prêtes à être téléchargées / installées?
-
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.
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)