- 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.
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.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
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.
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.
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:\>".
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
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.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.