Search code examples
c#.netwmi

SoftwareLicensingProduct Which one is my


I need to check whether the OS needs activation, my following code displays a multitude of "channels".

static void Main(string[] args)
    {
        ManagementObjectSearcher searcher =
               new ManagementObjectSearcher
    (
    "root\\CIMV2",
    "SELECT 
    Description,
    LicenseIsAddon,
    LicenseStatus 
    FROM SoftwareLicensingProduct 
    WHERE LicenseIsAddon = False"
    );

        foreach (ManagementObject queryObj in searcher.Get())
        {
            if (queryObj["Description"].ToString().ToLower().Contains("operating"))
            {
                foreach (var item in queryObj.Properties)
                {
                    Console.WriteLine(item.Value);
                }
            }
        }
        Console.Write("***done***");
        Console.ReadLine();
    }

How do i know which one to check in order to determine if i need to activate the OS?

Or is my only way to see, if i have any LicenseStatus = 1 in there? Which of course can be wrong if there is one activated and one not activated OS installed.

Thanks


Solution

  • For the time being i filtered the channels a bit more and concluded, that this is good enough:

    private void getOSActivation()
    {
       try
       {
         ManagementObjectSearcher LicenseSearcher =
                    new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT LicenseStatus,Description FROM SoftwareLicensingProduct");
    
         foreach (ManagementObject LSObj in LicenseSearcher.Get())
         {
           OStestString = LSObj["Description"].ToString().ToLower();
           if (
               OStestString.Contains("operating") 
               &&
               // next line is new
               (OStestString.Contains("slp") || OStestString.Contains("dm"))
              )
              {
                foreach (var item in LSObj.Properties)
                {
                  OSresults.Add(LSObj["LicenseStatus"].ToString());
                }
              }
            }
          }
        catch (Exception LSOexception)
        {
          Console.WriteLine(LSOexception.Message);
        }
      }