Get-ComputerInfo vs. SystemInfo: differenze reali, usi e trucchi

Ultimo aggiornamento: 14/08/2025
Autore: Isaac
  • Get-ComputerInfo restituisce oggetti coerenti; systeminfo richiede CSV + ConvertFrom-Csv.
  • systeminfo è veloce e remoto con /S /U /P; Get-ComputerInfo necessita di Invoke-Command.
  • La localizzazione influisce su systeminfo; normalizza le intestazioni per script robusti.

Confronto tra Get-ComputerInfo e systeminfo su Windows

Il confronto tra Get-ComputerInfo e systeminfo.exe è una query ricorrente tra gli amministratori che cercano il modo più efficiente e "pulito" per inventariare le attrezzature WindowsSebbene entrambi restituiscano informazioni di sistema, Non si comportano allo stesso modo, non hanno le stesse prestazioni e non offrono lo stesso tipo di output., che ha implicazioni dirette per l'automazione, la reportistica e l'esecuzione remota.

In questo articolo troverai una guida completa che integra pratiche reali, sfumature di performance, Tricks con la conduttura di PowerShell e dettagli meno evidenti come il individuazione delle intestazioni in systeminfo o perché La proprietà -Get-ComputerInfo restituisce oggetti Anche quando si richiede un singolo campo, tutto è spiegato in spagnolo, con esempi chiari e soluzioni agli errori più comuni quando si esegue il programma su computer remoti.

Che cos'è systeminfo.exe

systeminfo

systeminfo.exe è la classica utilità della riga di comando comandi per profilare un computer WindowsÈ disponibile dalle versioni precedenti (Windows XP Professional) a Windows 11, e si trova in %windir%\system32\systeminfo.exe (e anche sui sistemi a 64 bit) %windir%\SysWOW64\systeminfo.exe). Visualizza le impostazioni del sistema operativo, le informazioni di sicurezza, l'ID prodotto e le proprietà di hardware come RAM, spazio su disco o schede di rete.

Un enorme vantaggio è la sua ubiquità: È presente praticamente in tutti i sistemi operativi Windows. Ma ha un limite importante: l'uscita si trovaCiò significa che i nomi delle proprietà come "Memoria fisica disponibile" in inglese potrebbero apparire in modo diverso in altre lingue, complicando l'automazione che si basa su tali intestazioni.

Nonostante sia uno strumento “vecchio”, è sorprendentemente flessibile: Supporta i formati di output con l'interruttore /FO (Tabella, Elenco, CSV) e può consultare computer remoti utilizzando /S per la squadra, /U per l'utente e /P per la password. Ciò lo rende utile per inventari rapidi quando non si desidera impostare sessioni remote di PowerShell.

Che cos'è Get-ComputerInfo

ottenere-informazioni-sul-computer

Get-ComputerInfo è un cmdlet integrato da Windows PowerShell 5.1 (disponibile su Windows 10 e Windows Server 2016) che aggrega le proprietà del sistema e del sistema operativo in un singolo oggetto. si tratta di disponibile solo su Windows e restituisce istanze del tipo Microsoft.PowerShell.Management.ComputerInfo con centinaia di proprietà elencate.

Il suo grande vantaggio è che l'output è orientato agli oggetti fin dal primo minuto.: non è necessario analizzare il testoPuoi incanalarlo nella pipeline, formatear, filtra ed esporta in modo naturale con cmdlet come Select-Object, Formato-Elenco, Ordina-Oggetto o Export-Csv. Maggiori dettagli in questa guida.

  Esistono 5 modi per correggere questo errore: Semaforo scaduto

Il parametro -Property accetta un array di stringhe (String[]) e supporta i caratteri jolly. Ciò consente di scegliere set specifici di proprietà (ad esempio, tutte le proprietà relative a BIOS con *BIOS*) o un piccolo elenco come Nome sistema operativo, fuso orario, tipo di prodotto sistema operativo. Importante: L'alias per Get-ComputerInfo è gin, nel caso in cui vi imbattiate in script abbreviati.

Differenze principali e quando utilizzare ciascuna

Output e tipo di dati: systeminfo.exe produce testo (anche se può essere CSV), che richiede la conversione in oggetti per funzionare comodamente in PowerShell; Get-ComputerInfo restituisce oggetti ricchi pronto per la pipeline. Questa risorsa aiuta a comprendere meglio il processo.

Performance: Le fonti concordano sul fatto che Get-ComputerInfo è relativamente lento. Richiedi meno proprietà con -Proprietà non si traduce in un miglioramento significativo, poiché raccoglie comunque molte informazioni. Systeminfo.exe è solitamente molto veloce, soprattutto con CSV.

Remoto: systeminfo.exe offre /S, /U, /P per query remote; Get-ComputerInfo non ha -ComputerName o -CimSession, quindi devi usare Invoke-Command o sessioni remote di PowerShell (WinRM). Per ulteriori informazioni, visitare questa guida.

systeminfo.exe in fase di sviluppo: dal testo agli oggetti

Il modo più pratico per utilizzare systeminfo in PowerShell è quello di richiedere CSV e convertirlo in oggetti con Converti da CSVIn questo modo è possibile selezionare e operare sulle proprietà senza ricorrere a espressioni regolari o a ritagli manuali.

$objetos = systeminfo.exe /FO CSV | ConvertFrom-Csv
$objetos.'Available Physical Memory'

Il problema principale sono le intestazioni: In altre lingue, le proprietà saranno diverse, il che interrompe gli script. Per evitare ciò, normalizza le intestazioni e sostituirli con nomi fissi e stabili.

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

$objetos.Property23

Un'opzione ancora più elegante è definire i nomi delle colonne fin dall'inizio. Ad esempio, mappare tutte le colonne con nomi chiari come Nome host, Nome sistema operativo, Versione sistema operativo, Memoria fisica totale, ecc.

$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

Questo metodo elimina i problemi linguistici e rende la pipeline più robusta.Inoltre, è possibile esportare in CSV, JSON o manipolare ogni proprietà senza ambiguità.

Get-ComputerInfo: Selezione delle proprietà e formattazione

Un dettaglio che confonde molte persone è che, quando si richiede una singola proprietà con -Proprietà, il cmdlet restituisce un oggetto con quella proprietà, non il valore "nudo". Il motivo è una convenzione: -La proprietà è una stringa[], ed è progettato in modo che, con diverse proprietà, si ottenga un oggetto con esse. Per ulteriori informazioni, vedere questo articolo.

$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
Write-Output $info

# En formato lista
$info | Format-List

Se vuoi solo il valore di una proprietà, devi estrarre il membro, ad esempio, (Get-ComputerInfo).NomeOS, l'utilizzo Seleziona-Oggetto -Espandi-ProprietàMa ricorda che Richiedere meno proprietà non accelera significativamente il processo.

  Picchi di elevato utilizzo della CPU da parte del sistema o di svchost.exe – Guida tecnica passo passo

Query con caratteri jolly: BIOS e altro

Get-ComputerInfo è molto utile per filtrare in base ai modelliAd esempio, per vedere tutto ciò che riguarda il BIOS, utilizzare -Proprietà *BIOS* e formattato in un elenco per chiarezza.

Get-ComputerInfo -Property *BIOS* | Format-List

Può anche essere combinato con Invoke-Command per interrogare in remoto un sottoinsieme di proprietà e inviare i risultati a un CSV o a una console formattata.

Performance e buone pratiche

Get-ComputerInfo offre molti contenuti ma non è il più veloceLe fonti concordano sul fatto che Non è consigliabile invocarlo più volte per proprietà diverse.: significherà ripetere il lavoro. È meglio recuperare l'oggetto completo. solo una volta y seleziona le proprietà dopoPer maggiori informazioni, consulta questo articolo.

ysteminfo.exe è molto efficiente in CSV e, combinandolo con Converti da CSV e intestazioni personalizzate possono costituire la base per una rapida reportistica in ambienti eterogenei, in cui la comunicazione remota di PowerShell non è sempre abilitata.

Esecuzione remota: approcci ed esempi

Con systeminfo.exe È possibile interrogare direttamente i computer remoti utilizzando /S (nome della squadra), /U (utente) e /P (password). È utile quando WinRM non è configurato oppure hai bisogno di risultati specifici.

systeminfo /S EQUIPO01 /U DOMINIO\usuario /P ContraseñaSegura
# Sin dominio, cuenta local
systeminfo /S EQUIPO01 /U .\Administrador /P ContraseñaSegura

Con Get-ComputerInfo, non esiste alcun parametro -ComputerName. Per il lavoro da remoto, utilizzare Invoke-Command e un blocco di copioneLa raccolta viene effettuata sull'host remoto e vengono restituiti oggetti completiPer ampliare le tue conoscenze, visita .

Invoke-Command -ComputerName 'DC1' -ScriptBlock {
  Get-ComputerInfo -Property *BIOS*
}

Esempio pratico per l'inventario degli hotfix: abbiamo ampliato la proprietà OSHotFixes, ordiniamo in base al nome della squadra ed esportiamo se necessario.

Invoke-Command -ComputerName 'DC1','SRV01','Localhost' -ScriptBlock {
  Get-ComputerInfo | Select-Object -ExpandProperty OSHotFixes
} | Sort-Object PSComputerName | Export-Csv -NoTypeInformation SRV-Updates.csv

Errori tipici: credenziali, variabili e sintassi

1) "Uno o più nomi di computer non sono validi" in Invoke-CommandDi solito succede perché passare un nome non valido o scritto male. Ricorda: $CD3160-05 Non è un nome di squadra, è un espressione che tenta di sottrarre 05 da una variabile $CD3160 (che molto probabilmente non esiste). Utilizza virgolette e testo letterale: -NomeComputer '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) Chiusura delle parentesi graffe e blocco dello ScriptBlock. Assicurati aprire e chiudere correttamente { } ed evitare di mischiare la console interattiva all'interno dello ScriptBlock. Scrivere l'istruzione da eseguire in remoto, senza prompt o "PS C:\>".

  Scopri come disabilitare luoghi importanti sul tuo iPhone

3) Richiesta password quando si utilizza systeminfo /SSe il computer remoto non condivide il contesto di autenticazione, devi specificare /U e /PPer gli account locali, utilizzare .\UtenteSe c'è un dominio, DOMINIO\UtenteSe non conosci il dominio, controlla sul computer locale con whoami o %USERDOMAIN%. Per maggiori dettagli, vedere .

4) WinRM e policyPer Invoke-Command, WinRM deve essere abilitato e il computer remoto deve accettare le connessioni (firewall e TrustedHosts). Esegui Abilita-PSRemoting -Forza nella destinazione e controlla le regole del firewall per Gestione WS (HTTP 5985/HTTPS 5986)Per saperne di più, visita .

Esplorazione della guida ufficiale di Get-ComputerInfo

Utilizzare Get-Hep Get-ComputerInfo consultare il sintassi e proprietà. Parametro -Proprietà accetta Stringa[], supporta i caratteri jolly e restituisce un oggetto ComputerInfoÈ possibile reindirizzare le stringhe che sono nomi di proprietà e ricordarlo funziona solo su Windows.

Get-Help Get-ComputerInfo
# Sintaxis relevante
Get-ComputerInfo  <String[]>] 
# Alias: gin

Per ispezionare tutte le proprietà disponibili nel tuo sistema, canale a Ottieni-MembroIn Windows 10 vengono visualizzate numerose proprietà relative al BIOS, al sistema operativo, a Hyper-V, ecc.

Get-ComputerInfo | Get-Member | more

Esempi utili e formattazione

Elenca tutto (ma può essere molto lungo; usa di più per la paginazione):

Get-ComputerInfo | more

Filtra per versione utilizzando i caratteri jolly:

Get-ComputerInfo -Property '*version'

Seleziona proprietà specifiche e mostrarli chiaramente:

$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
$info | Format-List

Esempio con systeminfo + CSV e intestazioni personalizzate per risultati uniformi in diverse lingue:

$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
msinfo32
Articolo correlato:
Come visualizzare le informazioni di sistema e utilizzare msinfo32 in Windows

Compatibilità, posizioni e strumenti correlati

systeminfo.exe è un binario nativo di Windows e il suo codice può essere trovato in progetti come ReactOS. La sua posizione tipica in System32 e nel SysWOW64 per sistemi x64. Supporta il formato di output tramite /FO (Tabella, Elenco, CSV). Puoi anche consultare come mantenere aggiornati i componenti della guida.

Get-ComputerInfo è stato introdotto con PowerShell 5.1, coprendo un'esigenza che avevamo precedentemente risolto con Ottieni-WmiObject / Ottieni-CimInstanceUn altro strumento correlato è msinfo32.exe, utile per la diagnostica GUI, sebbene meno adatto alla pipeline.

Driver PCL vs PostScript
Articolo correlato:
Driver PCL vs. PostScript: differenze e come scegliere

Lascia un commento