- Get-ComputerInfo devuelve objetos consistentes; systeminfo requiere CSV + ConvertFrom-Csv.
- systeminfo es rápido y remoto con /S /U /P; Get-ComputerInfo necesita Invoke-Command.
- La localización afecta a systeminfo; normaliza cabeceras para scripts robustos.
Comparar Get-ComputerInfo y systeminfo.exe es una consulta recurrente entre administradores que buscan la forma más eficiente y “limpia” de inventariar equipos Windows. Aunque ambos devuelven información del sistema, no se comportan igual, no rinden igual y no ofrecen el mismo tipo de salida, lo que tiene implicaciones directas en automatización, reporting y ejecución remota.
En este artículo vas a encontrar una guía exhaustiva que integra prácticas reales, matices de rendimiento, trucos con el pipeline de PowerShell y detalles poco evidentes como la localización de cabeceras en systeminfo o por qué -Property de Get-ComputerInfo devuelve objetos incluso cuando pides un solo campo. Todo explicado en español de España, con ejemplos claros y soluciones a errores típicos al ejecutar contra equipos remotos.
Qué es systeminfo.exe
systeminfo.exe es la utilidad clásica de línea de comandos para perfilar un equipo Windows. Está disponible desde versiones antiguas (Windows XP Professional) hasta Windows 11, y se localiza en %windir%\system32\systeminfo.exe (y en sistemas de 64 bits también en %windir%\SysWOW64\systeminfo.exe). Muestra configuración del sistema operativo, información de seguridad, Product ID y propiedades de hardware como RAM, espacio en disco o tarjetas de red.
Una ventaja enorme es su ubicuidad: prácticamente en cualquier Windows está presente. Pero tiene una limitación importante: la salida está localizada. Eso significa que nombres de propiedades como “Available Physical Memory” en inglés pueden aparecer distintos en otros idiomas, complicando la automatización que depende de esas cabeceras.
Pese a ser una herramienta “antigua”, es sorprendentemente flexible: admite formatos de salida con el conmutador /FO (Table, List, CSV) y puede consultar equipos remotos usando /S para el equipo, /U para el usuario y /P para la contraseña. Esto la hace útil para inventarios rápidos cuando no quieres montar sesiones remotas de PowerShell.
Qué es Get-ComputerInfo
Get-ComputerInfo es un cmdlet incorporado desde Windows PowerShell 5.1 (disponible en Windows 10 y Windows Server 2016) que agrega propiedades del sistema y del SO en un único objeto. Está disponible solo en Windows y devuelve instancias del tipo Microsoft.PowerShell.Management.ComputerInfo con cientos de propiedades listadas.
Su gran baza es que la salida es orientada a objetos desde el minuto uno: no necesitas “parsear” texto. Puedes canalizarlo al pipeline, formatear, filtrar y exportar de manera natural con cmdlets como Select-Object, Format-List, Sort-Object o Export-Csv. Más detalles en esta guía.
El parámetro -Property acepta una matriz de cadenas (String[]) y soporta comodines. Eso permite escoger conjuntos concretos de propiedades (por ejemplo, todas las relativas a BIOS con *BIOS*) o una lista pequeña como OSName, TimeZone, OSProductType. Importante: el alias de Get-ComputerInfo es gin, por si te cruzas con scripts abreviados.
Diferencias clave y cuándo usar cada uno
Salida y tipo de datos: systeminfo.exe produce texto (aunque puede ser CSV), lo que requiere conversión a objetos para trabajar cómodo en PowerShell; Get-ComputerInfo devuelve objetos ricos listos para el pipeline. Este recurso ayuda a entender mejor el proceso.
Rendimiento: las fuentes coinciden en que Get-ComputerInfo es relativamente lento. Pedir menos propiedades con -Property no se traduce en una mejora significativa, ya que recopila gran parte de la información igualmente. Systeminfo.exe suele ser bastante rápido, especialmente con CSV.
Remoto: systeminfo.exe sí ofrece /S, /U, /P para consultas remotas; Get-ComputerInfo no tiene -ComputerName ni -CimSession, por lo que necesitas usar Invoke-Command o sesiones remotas de PowerShell (WinRM). Para ampliar conocimientos, visita esta guía.
systeminfo.exe en el pipeline: de texto a objetos
La forma más práctica de aprovechar systeminfo en PowerShell es solicitar CSV y convertir a objetos con ConvertFrom-Csv. Así, puedes seleccionar propiedades y operar con ellas sin regex ni recortes manuales.
$objetos = systeminfo.exe /FO CSV | ConvertFrom-Csv
$objetos.'Available Physical Memory'
El principal problema son las cabeceras: en otros idiomas, las propiedades serán distintas, lo que rompe scripts. Para evitarlo, normaliza las cabeceras y reemplázalas por nombres fijos y estables.
$headers = 1..30 | ForEach-Object { "Property$_" }
$objetos = systeminfo.exe /FO CSV |
Select-Object -Skip 1 |
ConvertFrom-Csv -Header $headers
$objetos.Property23
Una opción aún más elegante es definir tus propios nombres de columnas desde el principio. Por ejemplo, mapea todas las columnas con nombres claros como 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
Este método elimina los problemas de idioma y hace que tu pipeline sea más robusto. Además, puedes exportar a CSV, JSON o manipular cada propiedad sin ambigüedades.
Get-ComputerInfo: selección de propiedades y formato
Un detalle que confunde a muchas personas es que, al solicitar una sola propiedad con -Property, el cmdlet devuelve un objeto con esa propiedad, no el valor “pelado”. La razón es la convención: -Property es un String[], y está pensado para que, con varias propiedades, obtengas un objeto con ellas. Para ampliar información, consulta este artículo.
$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
Write-Output $info
# En formato lista
$info | Format-List
Si solo quieres el valor de una propiedad, debes extraer el miembro, por ejemplo, (Get-ComputerInfo).OSName, o usar Select-Object -ExpandProperty. Pero recuerda que pedir menos propiedades no acelera significativamente el proceso.
Consultas por comodines: BIOS y mucho más
Get-ComputerInfo es muy útil para filtrar por patrones. Por ejemplo, para ver todo lo relacionado con BIOS, utiliza -Property *BIOS* y formatea en lista para mayor claridad.
Get-ComputerInfo -Property *BIOS* | Format-List
También puede combinarse con Invoke-Command para consultar remotamente un subconjunto de propiedades y canalizar los resultados a CSV o a la consola formateada.
Rendimiento y buenas prácticas
Get-ComputerInfo ofrece mucho contenido pero no es el más rápido. Las fuentes coinciden en que invocarlo varias veces para distintas propiedades no es recomendable: será repetir el trabajo. Lo mejor es recuperar el objeto completo una sola vez y seleccionar las propiedades después. Para ampliar información, revisa este artículo.
ysteminfo.exe es muy eficiente en CSV y, combinándolo con ConvertFrom-Csv y cabeceras personalizadas, puede ser una base para informes rápidos en entornos heterogéneos, donde el remoting de PowerShell no siempre está habilitado.
Ejecución remota: enfoques y ejemplos
Con systeminfo.exe puedes consultar equipos remotos directamente usando /S (nombre del equipo), /U (usuario) y /P (contraseña). Es útil cuando WinRM no está configurado o necesitas resultados puntuales.
systeminfo /S EQUIPO01 /U DOMINIO\usuario /P ContraseñaSegura
# Sin dominio, cuenta local
systeminfo /S EQUIPO01 /U .\Administrador /P ContraseñaSegura
Con Get-ComputerInfo, no hay parámetro -ComputerName. Para trabajo remoto, se usa Invoke-Command y un bloque de script. La recolección se hace en el host remoto y se retornan objetos completos. Para ampliar conocimientos, visita .
Invoke-Command -ComputerName 'DC1' -ScriptBlock {
Get-ComputerInfo -Property *BIOS*
}
Ejemplo práctico para inventario de hotfixes: expandimos la propiedad OSHotFixes, ordenamos por nombre de equipo y exportamos si es necesario.
Invoke-Command -ComputerName 'DC1','SRV01','Localhost' -ScriptBlock {
Get-ComputerInfo | Select-Object -ExpandProperty OSHotFixes
} | Sort-Object PSComputerName | Export-Csv -NoTypeInformation SRV-Updates.csv
Errores típicos: credenciales, variables y sintaxis
1) “One or more computer names are not valid” en Invoke-Command. Suele ocurrir por pasar un nombre inválido o mal tipado. Recuerda: $CD3160-05 no es un nombre de equipo, es una expresión que intenta restar 05 a una variable $CD3160 (que seguramente no existe). Usa comillas y texto literal: -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) Cierre de llaves y bloqueo del ScriptBlock. Asegúrate de abrir y cerrar correctamente { } y de no mezclar la consola interactiva dentro del ScriptBlock. Escribe la instrucción que se ejecutará en remoto, sin prompts ni “PS C:\>”.
3) Solicitud de contraseña al usar systeminfo /S. Si el equipo remoto no comparte contexto de autenticación, debes especificar /U y /P. Para cuentas locales, usa .\Usuario. Si hay dominio, DOMINIO\Usuario. Si no conoces el dominio, revisa en el equipo local con whoami o %USERDOMAIN%. Para más detalles, consulta .
4) WinRM y políticas. Para Invoke-Command, WinRM debe estar habilitado y el equipo remoto debe aceptar conexiones (firewall y TrustedHosts). Ejecuta Enable-PSRemoting -Force en el destino y revisa reglas de firewall para WS-Management (HTTP 5985/HTTPS 5986). Para aprender más, visita .
Explorando la ayuda oficial de Get-ComputerInfo
Usa Get-Help Get-ComputerInfo para consultar la sintaxis y propiedades. El parámetro -Property acepta String[], soporta comodines, y devuelve un objeto ComputerInfo. Se puede canalizar cadenas que sean nombres de propiedades y recuerda que solo funciona en Windows.
Get-Help Get-ComputerInfo
# Sintaxis relevante
Get-ComputerInfo <String[]>]
# Alias: gin
Para inspeccionar todas las propiedades disponibles en tu sistema, canaliza a Get-Member. En Windows 10, se muestran muchas propiedades relacionadas con BIOS, SO, Hyper-V, etc.
Get-ComputerInfo | Get-Member | more
Ejemplos útiles y formateo
Listar todo (pero puede ser muy extenso; usa more para paginar):
Get-ComputerInfo | more
Filtrar por versión usando comodines:
Get-ComputerInfo -Property '*version'
Seleccionar propiedades específicas y mostrarlas de forma clara:
$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
$info | Format-List
Ejemplo con systeminfo + CSV y cabeceras personalizadas para resultados uniformes en diferentes idiomas:
$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
Compatibilidad, ubicaciones y herramientas afines
systeminfo.exe es un binario nativo de Windows y su código puede encontrarse en proyectos como ReactOS. Su ubicación típica en System32 y en SysWOW64 para sistemas x64. Soporta formato de salida mediante /FO (Table, List, CSV). También puedes consultar cómo mantener actualizados los componentes de ayuda.
Get-ComputerInfo fue introducido con PowerShell 5.1, cubriendo una necesidad que antes resolvíamos con Get-WmiObject / Get-CimInstance. Otra herramienta relacionada es msinfo32.exe, útil para diagnósticos GUI, aunque menos pipeline-friendly.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.