none
[WMI] Wenn Rückgabewert = "Null" dann... RRS feed

  • Frage

  • Hey!

    Ich melde mich auch mal wieder zu Wort.
    Mit WMI möchte ich einige Informationen zum Computer auslesen. Funktioniert auch alles, aber:
    Es gibt ja Win32_OperatingSystem. Dort möchte ich "CSDVersion" auslesen. Da wird ja das Servicepack angezeigt.
    Wenn man allerdings kein SP installiert hat ist dieser Wert "NULL" (siehe hier).
    Nun möchte ich, wenn dieser Wert "NULL" ist, eben anzeigen lassen, dass kein Service Pack installiert ist.
    Ich wüsste derzeit nicht, wie ich das lösen sollte.
    Probiert hab ich scho:
    Dim compItem As Object
      Dim comp As Object
      compItem = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    
    If IsDBNull(comp.CSDVersion) Then
       Return "Kein SP"
      Else
       Return comp.CSDVersion
      End If
    
    If comp.CSDVersion = Nothing Then
       Return "Kein SP"
      Else
       Return comp.CSDVersion
      End If
    
    If comp.CSDVersion = vbNullString Then
       Return "Kein SP"
      Else
       Return comp.CSDVersion
      End If
    
    If comp.CSDVersion = vbNull Then
       Return "Kein SP"
      Else
       Return comp.CSDVersion
      End If
    
    Funktioniert aber alles nicht!

    Wie könnte man jetzt überprüfen, ob der Rückgabewert "NULL" ("DBNull" oder was auch immer) ist?

    LG
    Dominik

    Samstag, 19. März 2011 22:10

Antworten

  • Hallo Dominik,

    Deine Abfrage kann so auch nicht funktionieren, da InstancesOf("Win32_OperatingSystem") eine Auflistung von Win32_OperatingSystem Instanzen zurückgibt. Im Normalfall hat diese Auflistung genau eine Instanz als Inhalt:

        Dim lInstances = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
        
        For Each lInstance In lInstances
          If IsDBNull(lInstance.CSDVersion) Then
            Return "Kein SP"
          Else
            Return lInstance.CSDVersion
          End If
        Next
    

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Sonntag, 20. März 2011 14:43

Alle Antworten

  • Hallo Dominik,

    Deine Abfrage kann so auch nicht funktionieren, da InstancesOf("Win32_OperatingSystem") eine Auflistung von Win32_OperatingSystem Instanzen zurückgibt. Im Normalfall hat diese Auflistung genau eine Instanz als Inhalt:

        Dim lInstances = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
        
        For Each lInstance In lInstances
          If IsDBNull(lInstance.CSDVersion) Then
            Return "Kein SP"
          Else
            Return lInstance.CSDVersion
          End If
        Next
    

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Sonntag, 20. März 2011 14:43
  • Hallo Dominik Klasen, 

    Mit WMI möchte ich einige Informationen zum Computer auslesen.

    Hat Dir die Antwort geholfen?

    Ohne WMI geht das in VB.NET wie folgt:

    How to determine the operating system service pack level in Visual Basic .NET or in Visual Basic 2005

    Grüße,

    Robert

    Montag, 21. März 2011 10:45
  • Hallo Dominik Klasen,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 23. März 2011 15:08