iCPUID is a lightweight cross-platform implementation that allows us to obtain the CPUID information.
Works on Windows, Mac and Linux
Now if you want you can use iCPUID from PowerShell. It has the iPowerShellCpuid module available that contains a collection of Cmdlets that allow us to obtain the CPUID information. If you want to know more, please review the available documentation from here.
- From PowerShellGallery
- From PowerShell console
PM> Install-Module -Name iPowerShellCpuid
Call CPUID.Instance.Leafs for getting all CPUID implemented leafs.
-
Detection of the availability of the CPUID instruction.
CPUID cpuid = CPUID.Instance; Console.WriteLine($@" Is Available > {cpuid.IsAvailable}");
-
Gets and prints all CPUID implemented leafs.
CPUID cpuid = CPUID.Instance; ReadOnlyCollection<Leaf> leafs = cpuid.ImplementedLeafs; foreach (Leaf leaf in leafs) { Console.WriteLine($@" {(int)leaf:X8}-{leaf}"); }
-
Gets and prints all CPUID leafs > sub-leafs.
CPUID cpuid = CPUID.Instance; CpuidLeafDictionary? leafs = cpuid.Leafs; foreach (var (leaf, subLeafs) in leafs) { Console.WriteLine($@" > {leaf} (EAX={(int)leaf:X8})"); foreach (var subLeaf in subLeafs) { Console.WriteLine($@" > {subLeaf.SubLeaf} "); } Console.WriteLine(); }
-
Gets and prints all CPUID leafs > sub-leafs (shows description).
CPUID cpuid = CPUID.Instance; CpuidLeafDictionary? leafs = cpuid.Leafs; foreach (var (leaf, subLeafs) in leafs) { Console.WriteLine($@" > {leaf} (EAX={(int)leaf:X8})"); foreach (var subLeaf in subLeafs) { Console.WriteLine($@" > {subLeaf.SubLeaf} (ECX={(int)subLeaf.SubLeaf:X8})"); } Console.WriteLine(); }
-
Gets and prints all CPUID leafs > sub-leafs (values).
CPUID cpuid = CPUID.Instance; CpuidLeafDictionary? leafs = cpuid.Leafs; foreach (var (leaf, subLeafs) in leafs) { Console.WriteLine($@" > {leaf} (EAX={(int)leaf:X8})"); foreach (var subLeaf in subLeafs) { Console.WriteLine($@" > {subLeaf.SubLeaf} (ECX={(int)subLeaf.SubLeaf:X8})"); IEnumerable<IPropertyKey> properties = subLeaf.ImplementedProperties; foreach (IPropertyKey property in properties) { QueryPropertyResult queryResult = subLeaf.GetProperty(property); PropertyItem propertyItem = queryResult.Result; object value = propertyItem.Value; PropertyUnit valueUnit = property.PropertyUnit; string friendlyName = property.GetPropertyName(); string unit = valueUnit == PropertyUnit.None ? string.Empty : valueUnit.ToString(); if (value == null) { Console.WriteLine($@" > {friendlyName}: NULL"); continue; } if (value is bool) { Console.WriteLine($@" > {friendlyName}: {value} [{((bool)value ? 1 : 0)}]"); } else 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 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 ulong) { Console.WriteLine($@" > {friendlyName}: {value} {unit} [{value:X8}h]"); } 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}"); } } } Console.WriteLine(); }
-
Gets a single property directly.
CPUID cpuid = CPUID.Instance; QueryPropertyResult manufacturerQueryResult = cpuid.Leafs.GetProperty(LeafProperty.BasicInformation.Manufacturer); if (manufacturerQueryResult.Success) { Console.WriteLine($" > Manufacturer: {manufacturerQueryResult.Result.Value}"); } QueryPropertyResult avx2 = cpuid.Leafs.GetProperty(LeafProperty.ExtendedFeatures.AVX2); if (avx2.Success) { Console.WriteLine($" > AVX2: {avx2.Result.Value}"); }
-
Gets a property in multiple elements directly.
CPUID cpuid = CPUID.Instance; CpuidLeafDictionary? leafs = cpuid.Leafs; QuerySubLeafPropertyCollectionResult cacheSizesQueryResult = leafs.GetProperties(LeafProperty.DeterministicCacheParameters.CacheSize); if (cacheSizesQueryResult.Success) { CpuidSubLeafDictionary cacheSizes = cacheSizesQueryResult.Result; bool hasCacheSizesEntries = cacheSizes.Any(); if (!hasCacheSizesEntries) { Console.WriteLine($@" > Sorry, The 'LeafProperty.DeterministicCacheParameters.CacheSize' property has not implementes on this system"); } else { foreach (var (subLeaf, propertyItem) in cacheSizes) { Console.WriteLine($@" > Cache Size: ({subLeaf}) > {propertyItem.Value} {propertyItem.Key.PropertyUnit}"); } } }
- For full code documentation, please see next link documentation.
If you have found iCPUID useful at work or in a personal project, I would love to hear about it. If you have decided not to use iCPUID, please send me and email stating why this is so. I will use this feedback to improve iCPUID in future releases.
My email address is