Depois de vasculhar a documentação do SDCC do SCCM, o que acabei fazendo foi disponibilizar as atualizações mas não obrigatórias . Isso preenche uma classe WMI chamada CCM_SoftwareUpdate no namespace root / ccm / clientsdk, consulte aqui . Uma consulta simples como
"SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE=0 AND EVALUATIONSTATE < 2"
você receberá as atualizações disponíveis que ainda não foram instaladas. Quando as atualizações forem instaladas, elas serão removidas desse namespace, mas isso levará algum tempo. Se você precisar parar e reiniciar a instalação de atualizações por algum motivo, será útil filtrar as atualizações parcialmente instaladas. A página msdn tem mais informações sobre os diferentes estados de conformidade e estados de avaliação. Essa matriz de atualizações é então passada para o método InstallUpdates da classe CCM_SoftwareUpdatesManager no mesmo espaço de nomes, e você pode monitorar o progresso das atualizações individualmente (é por isso que escolhi passar minhas atualizações para esse método uma por uma em vez de todas uma vez. Passá-los de uma vez só não faz muito mais do que enfileirá-los e instalá-los um por um, de qualquer maneira, pelo que eu vi).
Eu peguei um gui rápido e sujo em C # (Você pode vê-lo aqui ), que eu defini como um script de logoff na política de grupo, então quando ele é executado, os usuários não podem ctl alt del out of ou pressione os botões para fechar a janela. É o mais parecido com a coisa real que eu poderia ter (nós temos controle sobre o background de login, então eu fiz o background do meu app parecer o mesmo para consistência).
A parte triste é que provavelmente não vamos adotar essa solução b / c da multiplicidade de laptops em nosso ambiente. Ninguém quer desligar o laptop e levá-lo para casa apenas para ter que esperar um tempo indeterminado instalando as atualizações, que naquele momento parecerão eternas.