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/.