Una lista de cada actualización y revisión que se haya instalado en mi computadora, proveniente de Microsoft Windows Update o de la base de conocimiento. Necesito el ID de cada uno en forma de KBxxxxxx o alguna representación similar …
Actualmente tengo:
const string query = "SELECT HotFixID FROM Win32_QuickFixEngineering"; var search = new ManagementObjectSearcher(query); var collection = search.Get(); foreach (ManagementObject quickFix in collection) Console.WriteLine(quickFix["HotFixID"].ToString());
Pero esto no parece enumerar todo, solo enumera los QFE.
Necesito que funcione en Windows XP, Vista y 7.
Puede usar el método IUpdateSession3 :: QueryHistory .
Las propiedades de las entradas devueltas se describen en http://msdn.microsoft.com/en-us/library/aa386400(VS.85).aspx
Establezca updateSearch = CreateObject ("Microsoft.Update.Session"). CreateUpdateSearcher Establecer updateHistory = updateSearch.QueryHistory (1, updateSearch.GetTotalHistoryCount) Para cada actualizaciónEntry in updateHistory Wscript.Echo "Título:" y updateEntry.Title Wscript.Echo "ID de aplicación:" & updateEntry.ClientApplicationID Wscript.Echo "-" Siguiente
editar: también echa un vistazo a http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx
Después de buscar más en lo que he encontrado antes. (Sí, lo mismo que sugiere VolkerK primero)
Usando el siguiente código puedo obtener una lista desde la cual puedo extraer los números KB:
var updateSession = new UpdateSession(); var updateSearcher = updateSession.CreateUpdateSearcher(); var count = updateSearcher.GetTotalHistoryCount(); var history = updateSearcher.QueryHistory(0, count); for (int i = 0; i < count; ++i) Console.WriteLine(history[i].Title);
En caso de que solo desee la lista de actualizaciones y no le importe si la obtiene a través de un código o una GUI, aquí le mostramos cómo hacerlo en Powershell:
string ExtractString(string s) { // You should check for errors in real-world code, omitted for brevity try { var startTag = "("; int startIndex = s.IndexOf(startTag) + startTag.Length; int endIndex = s.IndexOf(")", startIndex); return s.Substring(startIndex, endIndex - startIndex); } catch { return ("CNVFL"); } }
Arriba hay un método simple de extracción de cadenas que uso para encontrar que KB está en el paquete de seguridad como Tom Wijsman había mencionado y ejecutaba el suyo.
var updateSession = new UpdateSession(); var updateSearcher = updateSession.CreateUpdateSearcher(); var count = updateSearcher.GetTotalHistoryCount(); var history = updateSearcher.QueryHistory(0, count); for (int i = 0; i < count; ++i){ //sets KB here!! string _splitstring = ExtractString(history[i].Title); Console.WriteLine(_splitstring); }
esto te daría el número de KB que estás buscando, creo