iSMBIOS 1.1.3

iSMBIOS is a lightweight implementation that allows us to obtain SMBIOS information

Install-Package iSMBIOS -Version 1.1.3
dotnet add package iSMBIOS --version 1.1.3
<PackageReference Include="iSMBIOS" Version="1.1.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add iSMBIOS --version 1.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

What is iSMBIOS?

iSMBIOS is a lightweight implementation that allows us to obtain the SMBIOS information

This library implements DMTF Specification 3.4.0a (Preliminary version) and olders versions

For more information, please see https://www.dmtf.org/standards/smbios

Usage

Call DMI.Instance.Structures for gets all SMBIOS structures availables.

Examples

  1. Gets and prints SMBIOS version.

    Console.WriteLine($@" SMBIOS Version > {DMI.Instance.SmbiosVersion}");
    
  2. Gets and prints all SMBIOS availables structures.

    DmiStructureCollection structures = DMI.Instance.Structures;
    foreach (DmiStructure structure in structures)
    {
        Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName}");
    
        int totalStructures = structure.Elements.Count;
        if (totalStructures > 1)
        {
            Console.WriteLine($@"     > {totalStructures} structures");
        }
    }
    
  3. Gets and prints the implemented SMBIOS structure version.

    DmiStructureCollection structures = DMI.Instance.Structures;
    foreach (DmiStructure structure in structures)
    {
        Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName}");
    
        DmiClassCollection elements = structure.Elements;
        foreach (DmiClass element in elements)
        {
            Console.WriteLine($@"     > Version > {element.ImplementedVersion}");
        }
    }
    
  4. Gets a specific SMBIOS structure.

    DmiStructureCollection structures = DMI.Instance.Structures;
    DmiStructure bios = structures[SmbiosStructure.Bios];
    if (bios != null)
    {
        /// structure exist!!!
    }
    
  5. Gets a single property directly.

    DmiStructureCollection structures = DMI.Instance.Structures;
    object biosVersion = structures.GetProperty(DmiProperty.Bios.BiosVersion);
    if (biosVersion != null)
    {
        Console.WriteLine($@" BIOS Version > {biosVersion}");
    }
    
    string biosVendor = structures.GetProperty<string>(DmiProperty.Bios.Vendor);
    Console.WriteLine($@" > BIOS Vendor > {biosVendor}");
    
  6. Prints all SMBIOS structures properties

     DmiStructureCollection structures = DMI.Instance.Structures;      
     foreach (DmiStructure structure in structures)
     {
         DmiClassCollection elements = structure.Elements;
         foreach (DmiClass element in elements)
         {
             Console.WriteLine();
             Console.WriteLine(element.ImplementedVersion == DmiStructureVersion.Latest
                 ? $@" ———————————————————————————————————————————————————— {element.ImplementedVersion} ——"
                 : $@" ——————————————————————————————————————————————————————— {element.ImplementedVersion} ——");
             Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName} structure detail");
             Console.WriteLine(@" ——————————————————————————————————————————————————————————————");
             DmiClassPropertiesTable elementProperties = element.Properties;
             foreach (KeyValuePair<IPropertyKey, object> property in elementProperties)
             {
                 object value = property.Value;
    
                 IPropertyKey key = property.Key;
                 string friendlyName = GetFriendlyName(key);
                 PropertyUnit valueUnit = key.PropertyUnit;
                 string unit =
                     valueUnit == PropertyUnit.None
                         ? string.Empty
                         : valueUnit.ToString();
    
                 if (value == null)
                 {
                     Console.WriteLine($@" > {friendlyName} > NULL");
                     continue;
                 }
    
                 if (value is string)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit}");
                 }
                 else if (value is byte)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X2}h]");
                 }
                 else if (value is short)
                 {
                     Console.WriteLine(key.Equals(DmiProperty.MemoryDevice.ConfiguredMemoryClockSpeed)
                 }
                 else if (value is ushort)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                         ? $@" > {friendlyName} > {value} {(int.Parse(DMI.Instance.SmbiosVersion) > 300 ? PropertyUnit.MTs : PropertyUnit.MHz)} [{value:X4}h]"
                         : $@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is int)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is uint)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is long)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X8}h]");
                 }
                 else if (value is ulong)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X8}h]");
                 }
                 else if (value.GetType() == typeof(ReadOnlyCollection<byte>))
                 {
                     Console.WriteLine($@" > {friendlyName} > {string.Join(", ", (ReadOnlyCollection<byte>)value)}");
                 }
                 else if (value.GetType() == typeof(DmiGroupAssociationElementCollection))
                 {
                     // prints elements
                 }
                 else if (value.GetType() == typeof(ReadOnlyCollection<string>))
                 {
                     Console.WriteLine($@" > {friendlyName}");
                     var collection = (ReadOnlyCollection<string>)value;
                     foreach (var entry in collection)
                     {
                         Console.WriteLine($@"   > {entry} {unit}");
                     }
                 }
                 else
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit}");
                 }
             }
         }
     }
    
     private static string GetFriendlyName(IPropertyKey value)
     {
         string name = value.GetPropertyName();
         return string.IsNullOrEmpty(name)
             ? value.PropertyId.ToString()
             : name;
     }
    

Changes

For more information, please visit the next link CHANGELOG

What is iSMBIOS?

iSMBIOS is a lightweight implementation that allows us to obtain the SMBIOS information

This library implements DMTF Specification 3.4.0a (Preliminary version) and olders versions

For more information, please see https://www.dmtf.org/standards/smbios

Usage

Call DMI.Instance.Structures for gets all SMBIOS structures availables.

Examples

  1. Gets and prints SMBIOS version.

    Console.WriteLine($@" SMBIOS Version > {DMI.Instance.SmbiosVersion}");
    
  2. Gets and prints all SMBIOS availables structures.

    DmiStructureCollection structures = DMI.Instance.Structures;
    foreach (DmiStructure structure in structures)
    {
        Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName}");
    
        int totalStructures = structure.Elements.Count;
        if (totalStructures > 1)
        {
            Console.WriteLine($@"     > {totalStructures} structures");
        }
    }
    
  3. Gets and prints the implemented SMBIOS structure version.

    DmiStructureCollection structures = DMI.Instance.Structures;
    foreach (DmiStructure structure in structures)
    {
        Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName}");
    
        DmiClassCollection elements = structure.Elements;
        foreach (DmiClass element in elements)
        {
            Console.WriteLine($@"     > Version > {element.ImplementedVersion}");
        }
    }
    
  4. Gets a specific SMBIOS structure.

    DmiStructureCollection structures = DMI.Instance.Structures;
    DmiStructure bios = structures[SmbiosStructure.Bios];
    if (bios != null)
    {
        /// structure exist!!!
    }
    
  5. Gets a single property directly.

    DmiStructureCollection structures = DMI.Instance.Structures;
    object biosVersion = structures.GetProperty(DmiProperty.Bios.BiosVersion);
    if (biosVersion != null)
    {
        Console.WriteLine($@" BIOS Version > {biosVersion}");
    }
    
    string biosVendor = structures.GetProperty<string>(DmiProperty.Bios.Vendor);
    Console.WriteLine($@" > BIOS Vendor > {biosVendor}");
    
  6. Prints all SMBIOS structures properties

     DmiStructureCollection structures = DMI.Instance.Structures;      
     foreach (DmiStructure structure in structures)
     {
         DmiClassCollection elements = structure.Elements;
         foreach (DmiClass element in elements)
         {
             Console.WriteLine();
             Console.WriteLine(element.ImplementedVersion == DmiStructureVersion.Latest
                 ? $@" ———————————————————————————————————————————————————— {element.ImplementedVersion} ——"
                 : $@" ——————————————————————————————————————————————————————— {element.ImplementedVersion} ——");
             Console.WriteLine($@" {(int)structure.Class:D3}-{structure.FriendlyClassName} structure detail");
             Console.WriteLine(@" ——————————————————————————————————————————————————————————————");
             DmiClassPropertiesTable elementProperties = element.Properties;
             foreach (KeyValuePair<IPropertyKey, object> property in elementProperties)
             {
                 object value = property.Value;
    
                 IPropertyKey key = property.Key;
                 string friendlyName = GetFriendlyName(key);
                 PropertyUnit valueUnit = key.PropertyUnit;
                 string unit =
                     valueUnit == PropertyUnit.None
                         ? string.Empty
                         : valueUnit.ToString();
    
                 if (value == null)
                 {
                     Console.WriteLine($@" > {friendlyName} > NULL");
                     continue;
                 }
    
                 if (value is string)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit}");
                 }
                 else if (value is byte)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X2}h]");
                 }
                 else if (value is short)
                 {
                     Console.WriteLine(key.Equals(DmiProperty.MemoryDevice.ConfiguredMemoryClockSpeed)
                 }
                 else if (value is ushort)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                         ? $@" > {friendlyName} > {value} {(int.Parse(DMI.Instance.SmbiosVersion) > 300 ? PropertyUnit.MTs : PropertyUnit.MHz)} [{value:X4}h]"
                         : $@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is int)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is uint)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X4}h]");
                 }
                 else if (value is long)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X8}h]");
                 }
                 else if (value is ulong)
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit} [{value:X8}h]");
                 }
                 else if (value.GetType() == typeof(ReadOnlyCollection<byte>))
                 {
                     Console.WriteLine($@" > {friendlyName} > {string.Join(", ", (ReadOnlyCollection<byte>)value)}");
                 }
                 else if (value.GetType() == typeof(DmiGroupAssociationElementCollection))
                 {
                     // prints elements
                 }
                 else if (value.GetType() == typeof(ReadOnlyCollection<string>))
                 {
                     Console.WriteLine($@" > {friendlyName}");
                     var collection = (ReadOnlyCollection<string>)value;
                     foreach (var entry in collection)
                     {
                         Console.WriteLine($@"   > {entry} {unit}");
                     }
                 }
                 else
                 {
                     Console.WriteLine($@" > {friendlyName} > {value} {unit}");
                 }
             }
         }
     }
    
     private static string GetFriendlyName(IPropertyKey value)
     {
         string name = value.GetPropertyName();
         return string.IsNullOrEmpty(name)
             ? value.PropertyId.ToString()
             : name;
     }
    

Changes

For more information, please visit the next link CHANGELOG

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.1.3 452 3/6/2020
1.1.2 117 2/15/2020
1.1.1 1,525 10/20/2019
1.1.0 113 9/2/2019
1.0.9 74 8/28/2019
1.0.8 107 8/23/2019
1.0.7 119 8/13/2019
1.0.6 171 5/29/2019
1.0.5 197 4/25/2019
1.0.3 129 4/12/2019
1.0.2 119 4/2/2019
1.0.1 194 3/22/2019
1.0.0 791 12/29/2018