Get-ComputerInfo vs. systeminfo.exe (Part 1)

by Nov 26, 2019

For a long time, the command-line utility systeminfo.exe provides a wealth of information about a computer and can return object-oriented results with a little trick:

$objects = systeminfo.exe /FO CSV |
  ConvertFrom-Csv

$objects.'Available Physical Memory'

On the pros side, systeminfo.exe is available on almost all Windows systems. On the cons side, the results are localized which can be a problem with the property names: on English systems, a property may be called ‘Available Physical Memory’, yet on a German system it may be different. To normalize headers, you can strip them and replace them with your own:

$headers = 1..30 | ForEach-Object { "Property$_" }
$objects = systeminfo.exe /FO CSV |
  Select-Object -Skip 1 |
  ConvertFrom-Csv -Header $headers

This is the result:

 
PS> $objects


Property1  : DESKTOP-8DVNI43
Property2  : Microsoft Windows 10 Pro
Property3  : 10.0.18362 N/A Build 18362
Property4  : Microsoft Corporation
Property5  : Standalone Workstation
Property6  : Multiprocessor Free
Property7  : hello@test.com
Property8  : N/A
Property9  : 00330-50000-00000-AAOEM
Property10 : 9/3/2019, 11:42:41 AM
Property11 : 11/1/2019, 10:42:53 AM
Property12 : Dell Inc.
Property13 : XPS 13 7390 2-in-1
Property14 : x64-based PC
Property15 : 1 Processor(s) Installed.,[01]: Intel64 Family 6 Model 126 Stepping 5 
             GenuineIntel ~1298 Mhz
Property16 : Dell Inc. 1.0.9, 8/2/2019
Property17 : C:\Windows
Property18 : C:\Windows\system32
Property19 : \Device\HarddiskVolume1
Property20 : de;German (Germany)
Property21 : de;German (Germany)
Property22 : (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Property23 : 32,536 MB
Property24 : 19,169 MB
Property25 : 37,400 MB
Property26 : 22,369 MB
Property27 : 15,031 MB
Property28 : C:\pagefile.sys
Property29 : WORKGROUP
Property30 : \\DESKTOP-8DVNI43




PS> $objects.Property23
32,536 MB  
 

You can name your properties any way you want by providing your own list of property names in $headers:

$headers = 'HostName',
            'OSName',
            'OSVersion',
            'OSManufacturer',
            'OSConfiguration',
            'OSBuildType',
            'RegisteredOwner',
            'RegisteredOrganization',
            'ProductID',
            'OriginalInstallDate',
            'SystemBootTime',
            'SystemManufacturer',
            'SystemModel',
            'SystemType',
            'Processors',
            'BIOSVersion',
            'WindowsDirectory',
            'SystemDirectory',
            'BootDevice',
            'SystemLocale',
            'InputLocale',
            'TimeZone',
            'TotalPhysicalMemory',
            'AvailablePhysicalMemory',
            'VirtualMemoryMaxSize',
            'VirtualMemoryAvailable',
            'VirtualMemoryInUse',
            'PageFileLocations',
            'Domain',
            'LogonServer',
            'Hotfix',
            'NetworkCard',
            'HyperVRequirements'

$objects = systeminfo.exe /FO CSV |
  Select-Object -Skip 1 |
  ConvertFrom-Csv -Header $headers

$objects.ProductID

You are a PowerShell Professional, passionate about improving your code and skills? You take security seriously and are always looking for the latest advice and guidance to make your code more secure and faster? You’d love to connect to the vibrant PowerShell community and get in touch with other PowerShell Professionals to share tricks and experience? Then PowerShell Conference EU 2020 might be just the right place for you: https://psconf.eu (June 2-5, 2020 in Hanover, Germany).

It’s a unique mixture of classic conference with three parallel tracks filled with fast-paced PowerShell presentations, and advanced learning class with live discussions, Q&A and plenty of networking.

Secure your seat while they last: https://psconf.eu/register.html. Help build the agenda and make this “your” event by submitting hypothetical sessions you’d like to hear: https://powershell.one/psconfeu/psconf.eu-2020/reverse-cfp. And if you’d like to present yourself and join the psconf.eu speakers’ team, submit proposals: https://sessionize.com/psconfeu/.

Twitter This Tip! ReTweet this Tip!