Melhor maneira de detectar se o Windows tem o Windows Updates pronto para download / instalação?

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

  •  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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top