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