PowerShell plays friendly with existing console applications. One of the most useful is systeminfo.exe which gathers all kinds of useful system information. By importing the information provided by systeminfo.exe as CSV, PowerShell can convert the text information into rich objects:
$header = 'Hostname','OSName','OSVersion','OSManufacturer','OSConfig','Buildtype','RegisteredOwner','RegisteredOrganization','ProductID','InstallDate','StartTime','Manufacturer','Model','Type','Processor','BIOSVersion','WindowsFolder','SystemFolder','StartDevice','Culture','UICulture','TimeZone','PhysicalMemory','AvailablePhysicalMemory','MaxVirtualMemory','AvailableVirtualMemory','UsedVirtualMemory','PagingFile','Domain','LogonServer','Hotfix','NetworkAdapter' systeminfo.exe /FO CSV | Select-Object -Skip 1 | ConvertFrom-CSV -Header $header
When you run this, it will take a couple of seconds for systeminfo.exe to gather the information. Then, you get a wealth of information:
Note $headers: This variable defines the property names, and your list of headers is exchanged with the default headers. This way, the headers are always the same, regardless of the language a system is using.
You can also store the information in a variable and access the information individually:
$header = 'Hostname','OSName','OSVersion','OSManufacturer','OSConfig','Buildtype','RegisteredOwner','RegisteredOrganization','ProductID','InstallDate','StartTime','Manufacturer','Model','Type','Processor','BIOSVersion','WindowsFolder','SystemFolder','StartDevice','Culture','UICulture','TimeZone','PhysicalMemory','AvailablePhysicalMemory','MaxVirtualMemory','AvailableVirtualMemory','UsedVirtualMemory','PagingFile','Domain','LogonServer','Hotfix','NetworkAdapter' $result = systeminfo.exe /FO CSV | Select-Object -Skip 1 | ConvertFrom-CSV -Header $header