Melhor maneira de detectar se o Windows tem o Windows Updates pronto para download / instalação?
-
02-07-2019 - |
Pergunta
Eu estou interessado especificamente no Windows 2000 / XP, mas o Vista / 7 seria interessante também (se for diferente).
Eu estava pensando ao longo das linhas de agendamento de tarefas um arquivo de lote ou equivalente em uma base diária.
EDIT: Desculpe, eu deveria ter fornecido mais informações. A questão diz respeito a 10 máquinas que eu aplicar manualmente atualizações. Eu não quero para instalar as atualizações através de programação, mas apenas descobrir se há atualizações prontas para download / instalação (ou seja, o ícone de atualização escudo na bandeja do sistema está indicando isso) usando um lote ou script. Obrigado.
Solução 6
No final, o Windows SUS não era uma opção , por isso estou usando o seguinte em um conjunto de arquivos em lote com ActiveState ActivePerl (recomendado):
perl -Nle "imprimir $ _ se M / atualizações detectado / i" Isso pode ser bruto ou sujo, e pode quebrar no futuro, mas atualmente faz o que eu preciso. Obrigado por todas as idéias.
Outras dicas
Você pode usar 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);
}
}
}
o Windows SUS funciona muito bem para várias máquinas em uma rede .
O caminho "mais fácil" para contar é a configuração de atualizações do Windows para ocorrer todas as noites e baixar as atualizações, se disponível, que, em seguida, coloca o ícone de escudo atualização na bandeja do sistema. olhar apenas para a bandeja para ver se o ícone está presente.
Você poderia também configurar o Windows para verificar todas as noites durante as atualizações, faça o download e instalá-los em um determinado momento.
No que diz respeito ao que mdsindzeleta disse - vai sobre isso programaticamente provavelmente não é a melhor solução. Gostaria de usar os recursos integrados do Windows XP para baixar e instalar atualizações. Estou assumindo que o Vista tem características semelhantes.
Eu acredito que as atualizações do Windows são baixados usando o serviço BITS. Você poderia usar Bitsadmin.exe encontrados nas ferramentas de suporte do Windows. Na linha de comando você pode executar Bitsadmin.exe / list e você pode ver o status dos trabalhos do BITS. (Ou seja, o progresso da transferência, nome do trabalho, o status do trabalho)