- Get-ComputerInfo returns consistent objects; systeminfo requires CSV + ConvertFrom-Csv.
- systeminfo is fast and remote with /S /U /P; Get-ComputerInfo needs Invoke-Command.
- Localization affects systeminfo; normalizes headers for robust scripts.
Comparing Get-ComputerInfo and systeminfo.exe is a recurring query among administrators looking for the most efficient and “clean” way to inventory equipment Windows. Although both return system information, They do not behave the same, they do not perform the same and they do not offer the same type of output., which has direct implications for automation, reporting and remote execution.
In this article you will find a comprehensive guide which integrates real practices, performance nuances, Tricks with the pipeline of PowerShell and less obvious details like the locating headers in systeminfo or why -Get-ComputerInfo property returns objects Even when you request a single field. Everything is explained in Spanish, with clear examples and solutions to common errors when running against remote computers.
What is systeminfo.exe

systeminfo.exe is the classic command-line utility commands to profile a Windows computer. It is available from older versions (Windows XP Professional) to Windows 11, and is located in %windir%\system32\systeminfo.exe (and on 64-bit systems too) %windir%\SysWOW64\systeminfo.exe). Displays operating system settings, security information, Product ID, and properties of hardware , the RAM, disk space or network cards.
A huge advantage is its ubiquity: It's present in virtually every Windows operating system. But it has one major limitation: the exit is locatedThis means that property names like “Available Physical Memory” in English may appear differently in other languages, complicating automation that relies on those headers.
Despite being an “old” tool, it is surprisingly flexible: Supports output formats with the switch /FO (Table, List, CSV) and can consult remote computers using /S for the team, /U for the user and /P for the password. This makes it useful for quick inventories when you don't want to set up remote PowerShell sessions.
What is Get-ComputerInfo
Get-ComputerInfo is a built-in cmdlet since Windows PowerShell 5.1 (available on Windows 10 and Windows Server 2016) that aggregates system and OS properties into a single object. Is available only on Windows and returns instances of the type Microsoft.PowerShell.Management.ComputerInfo with hundreds of properties listed.
Its great advantage is that the output is object-oriented from the first minute.: you don't need to parse text. You can channel it to the pipeline, forma tear, filter and export naturally with cmdlets like Select-Object, Format-List, Sort-Object o Export-Csv. More details in this guide.
The -Property parameter accepts an array of strings (String[]) and supports wildcards. This allows you to choose specific sets of properties (for example, all properties related to BIOS *BIOS*) or a small list like OSName, TimeZone, OSProductType. Important: The alias for Get-ComputerInfo is gin, in case you come across shortened scripts.
Key differences and when to use each
Output and data type: systeminfo.exe produces text (although it can be CSV), which requires conversion to objects to work comfortably in PowerShell; Get-ComputerInfo returns rich objects ready for the pipeline. This resource helps to better understand the process.
Unlimited: Sources agree that Get-ComputerInfo is relatively slow. Ask for fewer properties with -Property does not translate into a significant improvement, as it collects much of the information anyway. Systeminfo.exe is usually pretty fast, especially with CSV.
Remote: systeminfo.exe does offer /S, /U, /P for remote queries; Get-ComputerInfo does not have -ComputerName or -CimSession, so you need to use Invoke-Command or remote PowerShell sessions (WinRM). For more information, visit this guide.
systeminfo.exe in the pipeline: from text to objects
The most practical way to use systeminfo in PowerShell is to request CSV and convert to objects with ConvertFrom-Csv. This way, you can select and operate on properties without regex or manual cropping.
$objetos = systeminfo.exe /FO CSV | ConvertFrom-Csv
$objetos.'Available Physical Memory'
The main problem is the headers: In other languages, the properties will be different, which breaks scripts. To avoid this, normalizes headers and replace them with fixed and stable names.
$headers = 1..30 | ForEach-Object { "Property$_" }
$objetos = systeminfo.exe /FO CSV |
Select-Object -Skip 1 |
ConvertFrom-Csv -Header $headers
$objetos.Property23
An even more elegant option is to define your own column names from the start. For example, map all columns with clear names like HostName, OSName, OSVersion, TotalPhysicalMemory, etc.
$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'
$objetos = systeminfo.exe /FO CSV |
Select-Object -Skip 1 |
ConvertFrom-Csv -Header $headers
$objetos.ProductID
This method eliminates language issues and makes your pipeline more robust.. Additionally, you can export to CSV, JSON, or manipulate each property without ambiguity.
Get-ComputerInfo: Selecting Properties and Formatting
A detail that confuses many people is that, when requesting a single property with -Property, the cmdlet returns an object with that property, not the “bare” value. The reason is convention: -Property is a String[], and it's designed so that, with several properties, you get an object with them. For more information, see this article.
$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
Write-Output $info
# En formato lista
$info | Format-List
If you just want the value of a property, you must extract the member, for example, (Get-ComputerInfo).OSName, or use Select-Object -ExpandProperty. But remember that Asking for fewer properties does not significantly speed up the process.
Wildcard Queries: BIOS and More
Get-ComputerInfo is very useful for filtering by patterns. For example, to see everything related to BIOS, use -Property *BIOS* and formatted in a list for clarity.
Get-ComputerInfo -Property *BIOS* | Format-List
Can also be combined with Invoke-Command to remotely query a subset of properties and pipe the results to CSV or formatted console.
Performance and good practices
Get-ComputerInfo offers a lot of content but is not the fastest. Sources agree that Invoking it multiple times for different properties is not recommended.: will mean repeating the work. It is best to recover the complete object. just one time y select the properties afterFor more information, check out this article.
ysteminfo.exe is very efficient in CSV and, combining it with ConvertFrom-Csv and custom headers, can be a basis for quick reporting in heterogeneous environments, where PowerShell remoting is not always enabled.
Remote Execution: Approaches and Examples
With systeminfo.exe You can query remote computers directly using /S (team name), /U (user) and /P (password). It is useful when WinRM is not configured or you need specific results.
systeminfo /S EQUIPO01 /U DOMINIO\usuario /P ContraseñaSegura
# Sin dominio, cuenta local
systeminfo /S EQUIPO01 /U .\Administrador /P ContraseñaSegura
With Get-ComputerInfo, there is no -ComputerName parameter. For remote work, use Invoke-Command and a block of script. Collection is done on the remote host and complete objects are returned. To expand your knowledge, visit .
Invoke-Command -ComputerName 'DC1' -ScriptBlock {
Get-ComputerInfo -Property *BIOS*
}
Practical example for hotfix inventory: we expanded the property OSHotFixes, we sort by team name and export if necessary.
Invoke-Command -ComputerName 'DC1','SRV01','Localhost' -ScriptBlock {
Get-ComputerInfo | Select-Object -ExpandProperty OSHotFixes
} | Sort-Object PSComputerName | Export-Csv -NoTypeInformation SRV-Updates.csv
Typical errors: credentials, variables and syntax
1) “One or more computer names are not valid” in Invoke-Command. It usually happens because pass an invalid or misspelled name. Remember: $CD3160-05 It's not a team name, it's a expression which attempts to subtract 05 from a variable $CD3160 (which most likely doesn't exist). It uses quotes and literal text: -ComputerName 'CD3160-05'.
# Incorrecto (interpreta variable y resta)
Invoke-Command -ComputerName $CD3160-05 -ScriptBlock { Get-ComputerInfo }
# Correcto (literal)
Invoke-Command -ComputerName 'CD3160-05' -ScriptBlock { Get-ComputerInfo }
2) Closing braces and locking the ScriptBlock. Be sure to open and close correctly { } and avoid mixing the interactive console within the ScriptBlock. Write the instruction to be executed remotely, without prompts or “PS C:\>”.
3) Password prompt when using systeminfo /S. If the remote computer does not share authentication context, you must specify /U and /P. For local accounts, use .\User. If there is domain, DOMAIN\User. If you don't know the domain, check on the local computer with whoami or %USERDOMAIN%. For more details, see .
4) WinRM and policies. For Invoke-Command, WinRM must be enabled and the remote computer must accept connections (firewall and TrustedHosts). Run Enable-PSRemoting -Force at the destination and check firewall rules for WS-Management (HTTP 5985/HTTPS 5986)To learn more, visit .
Exploring Get-ComputerInfo's official help
Use Get-Help Get-ComputerInfo to consult the syntax and properties. Parameter -Property you accept String [], supports wildcards, and returns an object ComputerInfo. You can pipe strings that are property names and remember that only works on Windows.
Get-Help Get-ComputerInfo
# Sintaxis relevante
Get-ComputerInfo <String[]>]
# Alias: gin
To inspect all available properties in your system, channel to Get-MemberIn Windows 10, many properties related to BIOS, OS, Hyper-V, etc. are displayed.
Get-ComputerInfo | Get-Member | more
Useful examples and formatting
List all (but it can be very long; use more to paginate):
Get-ComputerInfo | more
Filter by version using wildcards:
Get-ComputerInfo -Property '*version'
Select specific properties and display them clearly:
$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
$info | Format-List
Example with systeminfo + CSV and custom headers for uniform results in different languages:
$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'
$objetos = systeminfo.exe /FO CSV |
Select-Object -Skip 1 |
ConvertFrom-Csv -Header $headers
$objetos | Select-Object HostName, OSName, OSVersion
Compatibility, locations and related tools
systeminfo.exe is a native Windows binary and its code can be found in projects like ReactOS. Its typical location in System32 and in SysWOW64 for x64 systems. Supports output format via /FO (Table, List, CSV). You can also consult how to keep help components up to date.
Get-ComputerInfo was introduced with PowerShell 5.1, covering a need that we previously solved with Get-WmiObject / Get-CimInstance. Another related tool is msinfo32.exe, useful for GUI diagnostics, although less pipeline-friendly.
Passionate writer about the world of bytes and technology in general. I love sharing my knowledge through writing, and that's what I'll do on this blog, show you all the most interesting things about gadgets, software, hardware, tech trends, and more. My goal is to help you navigate the digital world in a simple and entertaining way.

