Laden...

Letztes Windows Update Datum via WMI Services auslesen

Erstellt von accSharp vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.529 Views
A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 9 Jahren
Letztes Windows Update Datum via WMI Services auslesen

Hallo zusammen,

mein Ziel ist es in meiner Entwicklungsumgebung den letzten Windows Update Zeitpunkt des verwendeten Rechners abzurufen. Der Zeitpunkt wird unter Systemsteuerung --> Windows Update --> "Updates wurden installiert: XX.XX.XXXX" angegeben.

Ich verwende nun folgenden Code:


[STAThread]
static void Main()
{
    ManagementScope scope = new ManagementScope("\\\\VM195003\\root\\cimv2");
    scope.Connect();

    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    ManagementObjectCollection queryCollection = searcher.Get();

    foreach (ManagementObject m in queryCollection)
    {
       Console.WriteLine("Computer Name : {0}", m["csname"]);
       Console.WriteLine("Windows Directory : {0}",m["WindowsDirectory"]);
       Console.WriteLine("Operating System: {0}",m["Caption"]);
       Console.WriteLine("Version: {0}", m["Version"]);
       Console.WriteLine("Manufacturer : {0}",m["Manufacturer"]);
    }
}

In dem funktionierenden Beispiel ruft man lediglich ein paar grundlegende Informationen aus der Klasse Win32_OperatingSystem des Namespace root\cimv2 zum OS ab.

Um nun zu wissen, welche Klasse und welchen Namespace ich für meine Aufgabe verwenden muss, habe ich den WMI Code Generator zu Rate gezogen. (Microsoft Download Center: WMI Code Creator v1.0)

Dort bekomme ich eine Übersicht über alle Klassen und deren Namespaces sowie deren verfügbare Properties, die ich in dem Code verwenden könnte.

Nun schön und gut. Leider finde ich genau das was ich wissen möchte nicht, denn es gibt ca. 30 Namespaces und der bisher verwendete Namespaces beinhaltet schon 575 Klassen.

Hat daher jemand eine Idee, welche Klasse ich für mein Anwendungsgebiet verwenden kann?

Vielen Dank und viele Grüße!
accredis

16.842 Beiträge seit 2008
vor 9 Jahren

Frag doch einfach die Registry ab. Unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results gibts 3 Keys, jeweils mit DateTime-Informationen.

A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 9 Jahren

Hi Abt,

vielen Dank für Deine Antwort. Das könnte ich natürlich machen. Aber im zweiten Schritt möchte ich innerhalb der Domäne den Update Zeitpunkt eines Remote-Rechners abfragen ungefähr so:


            ConnectionOptions options = new ConnectionOptions();
            options.Authority = "ntdlmdomain:DOMAIN";
            options.Username = "USER";
            options.Password = "PASSWORD";

            ManagementScope scope = new ManagementScope("\\\\RECHNERNAME\\root\\cimv2", options);
            scope.Connect();


Hierzu erstelle ich ein ConnectionsOptions Objekt, welches ich als Parameter in dem ManagementScope Objekt mit übergebe. In diesem Fall habe ich natürlich keine Möglichkeit auf die Registry durchzugreifen, oder?

16.842 Beiträge seit 2008
vor 9 Jahren

..praktisch wärs natürlich, wenn Du solche Anforderungen im Startbeitrag nennst 😉
Microsoft bietet einen Windows Update Agent (WUA), den man sowas auch abfragen kann. Solltet ihr diesen haben, dann würde ich diesen als Schnittstelle verwenden. Ansonsten könnte man zB - wenn vorhanden - auch WSUS fragen.

Wo man genau WMI fragen muss: wahrscheinlich musst Du das selbst durchsuchen.
Denke nicht, dass Dir das jemand aus dem Stehgreif sagen kann.

A
accSharp Themenstarter:in
11 Beiträge seit 2015
vor 9 Jahren

..praktisch wärs natürlich, wenn Du solche Anforderungen im Startbeitrag nennst 😉

Das stimmt natürlich, aber mit dem Tipp auf die Registry habe ich nicht gerechnet. Daher wollte ich mein Anliegen nur knapp vorstellen. (-:

Wo man genau WMI fragen muss: wahrscheinlich musst Du das selbst durchsuchen.
Denke nicht, dass Dir das jemand aus dem Stehgreif sagen kann.

Das habe ich ja schon recht langwierig und es nicht gefunden, bzw. übersehen. Daher hoffe ich, dass sich jemand in den Klassen auskennt und ggf. eine Idee hat.

Microsoft bietet einen Windows Update Agent (WUA), den man sowas auch abfragen kann. Solltet ihr diesen haben, dann würde ich diesen als Schnittstelle verwenden. Ansonsten könnte man zB - wenn vorhanden - auch WSUS fragen.

Deinen Hinweis auf WSUS und WUA werde ich als Plan B mal im Hinterkopf behalten. (-;