cheat sheet
systeminfo
Display detailed OS, hardware, and network configuration for the local or a remote Windows machine. Covers output formats, remote querying, filtering, and parsing in scripts.
systeminfo — System Information
What it is
systeminfo is a built-in Windows command that queries and displays detailed configuration information about the local or a remote machine: OS version, build number, install date, hardware (CPU, RAM, BIOS), hotfixes, network adapters, and more. It ships with all Windows versions since XP as part of C:\Windows\System32\systeminfo.exe. For programmatic consumption, the /FO CSV or /FO LIST output formats are cleaner than the default table; for richer scripting, PowerShell's Get-ComputerInfo or WMI are more flexible alternatives.
Availability
systeminfo ships with Windows XP and later as C:\Windows\System32\systeminfo.exe. Remote querying requires the Remote Registry service and appropriate firewall rules on the target machine.
systeminfo /?
Output:
This tool displays operating system configuration information for
a local or remote machine, including service pack levels.
SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO format] [/NH]
Syntax
Without arguments systeminfo queries the local machine. Remote targets are specified with /S; credentials with /U and /P.
systeminfo [/S host] [/U domain\user] [/P password] [/FO TABLE|LIST|CSV] [/NH]
Output: (multi-line system report)
Essential options
| Switch | Meaning |
|---|---|
/S hostname | Query a remote machine |
/U domain\user | Run with alternate credentials |
/P password | Password for /U (prompt if omitted) |
/FO TABLE | Default tabular output |
/FO LIST | One property per line (Name: Value pairs) |
/FO CSV | Comma-separated values — best for scripting |
/NH | No header — suppress column headers (use with /FO TABLE or /FO CSV) |
Basic output
Running without arguments shows the full local system report.
systeminfo
Output:
Host Name: MYHOST
OS Name: Microsoft Windows 11 Pro
OS Version: 10.0.26100 N/A Build 26100
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
Registered Owner: alicedev
Registered Organization:
Product ID: 00000-00000-00000-AA000
Original Install Date: 01/01/2026, 09:00:00
System Boot Time: 28/04/2026, 06:30:00
System Manufacturer: ACME Corp
System Model: WorkStation 1000
System Type: x64-based PC
Processor(s): 1 Processor(s) Installed.
[01]: Intel64 Family 6 Model 186 Stepping 2 GenuineIntel ~3400 Mhz
BIOS Version: ACME Corp 1.2.3, 01/01/2025
Windows Directory: C:\Windows
System Directory: C:\Windows\system32
Boot Device: \Device\HarddiskVolume2
System Locale: en-us;English (United States)
Input Locale: en-us;English (United States)
Time Zone: (UTC+00:00) Dublin, Edinburgh, Lisbon, London
Total Physical Memory: 16,384 MB
Available Physical Memory: 8,192 MB
Virtual Memory: Max Size: 32,768 MB
Virtual Memory: Available: 18,432 MB
Virtual Memory: In Use: 14,336 MB
Page File Location(s): C:\pagefile.sys
Domain: WORKGROUP
Logon Server: \\MYHOST
Hotfix(s): 5 Hotfix(s) Installed.
[01]: KB1234567
...
Network Card(s): 1 NIC(s) Installed.
[01]: Intel(R) Ethernet Controller
DHCP Enabled: Yes
DHCP Server: 192.168.1.1
IP address(es): 192.168.1.100
List format
/FO LIST outputs one Name: Value pair per line — easier to parse with findstr than the default table.
systeminfo /FO LIST
Output:
Host Name: MYHOST
OS Name: Microsoft Windows 11 Pro
OS Version: 10.0.26100 N/A Build 26100
Total Physical Memory: 16,384 MB
Available Physical Memory: 8,192 MB
...
CSV format for scripting
/FO CSV outputs a header row followed by one data row — ideal for parsing with for /f in batch scripts or importing into Excel.
systeminfo /FO CSV
Output:
"Host Name","OS Name","OS Version","OS Manufacturer","OS Configuration","OS Build Type","Registered Owner","...
"MYHOST","Microsoft Windows 11 Pro","10.0.26100 N/A Build 26100","Microsoft Corporation","Standalone Workstation","...
rem CSV without header (for appending to an existing report)
systeminfo /FO CSV /NH
Output:
"MYHOST","Microsoft Windows 11 Pro","10.0.26100 N/A Build 26100",...
Filtering with findstr
Pipe systeminfo output into findstr to extract a specific property without parsing the full output.
rem OS build number
systeminfo | findstr /B /C:"OS Version"
Output:
OS Version: 10.0.26100 N/A Build 26100
rem Total and available RAM
systeminfo | findstr /C:"Total Physical Memory" /C:"Available Physical Memory"
Output:
Total Physical Memory: 16,384 MB
Available Physical Memory: 8,192 MB
rem All installed hotfixes
systeminfo | findstr /C:"Hotfix"
Output:
Hotfix(s): 5 Hotfix(s) Installed.
rem Boot time
systeminfo | findstr /B /C:"System Boot Time"
Output:
System Boot Time: 28/04/2026, 06:30:00
Querying a remote machine
/S targets a remote host by name or IP. /U provides alternate credentials; if /P is omitted, systeminfo prompts for the password interactively.
systeminfo /S myhost /U DOMAIN\alicedev
Output:
Password: (prompted)
Host Name: MYHOST
OS Name: Microsoft Windows Server 2022 Datacenter
...
rem With password in command (avoid in interactive sessions — use /P alone for prompt)
systeminfo /S myhost /U DOMAIN\alicedev /P s3cr3t /FO LIST
Output:
Host Name: MYHOST
OS Name: Microsoft Windows Server 2022 Datacenter
...
Saving output to a file
Redirect output to a text or CSV file for inventory or audit purposes.
systeminfo /FO CSV > C:\Audit\%COMPUTERNAME%_info.csv
Output: (no screen output — written to file)
systeminfo > C:\Audit\sysinfo.txt
type C:\Audit\sysinfo.txt | findstr "OS Version"
Output:
OS Version: 10.0.26100 N/A Build 26100
Common pitfalls
- Slow on first run —
systeminfoqueries WMI and can take 15–30 seconds; don't use it in tight loops. - Remote queries need Remote Registry service — ensure the service is running on the target and that WMI/RPC ports (135, 445, 49152+) are open through any firewall.
- CSV has a single data row —
systeminfo /FO CSVproduces one header row and one data row (for the queried machine); it does not produce one row per remote host when scripting multiple machines. Loop withforand redirect to a single accumulating CSV. - Credentials in plaintext on the command line — avoid
/P passwordin scripts visible to other users; userunasor PowerShell'sGet-Credentialinstead. - Output encoding — the default output uses the system OEM code page; redirect to a file with
> file.txtand open with the matching encoding in your editor.
Real-world recipes
Inventory OS build across a list of machines
@echo off
echo "Host","OS Version","Total RAM" > inventory.csv
for /f "delims=" %%h in (hostlist.txt) do (
for /f "tokens=1,3,10 delims=," %%a in (
'systeminfo /S %%h /FO CSV /NH 2^>NUL'
) do echo %%a,%%c,%%j >> inventory.csv
)
Output: (inventory.csv written with one row per host)
Check whether a specific hotfix is installed
systeminfo | findstr "KB5034441"
Output:
[03]: KB5034441
Get uptime from boot time
systeminfo | findstr /B /C:"System Boot Time"
Output:
System Boot Time: 28/04/2026, 06:30:00
Export full system report for a support ticket
systeminfo > %TEMP%\sysinfo_%COMPUTERNAME%_%DATE:~-4,4%%DATE:~-10,2%%DATE:~-7,2%.txt
echo Report saved to %TEMP%
Output:
Report saved to C:\Users\alicedev\AppData\Local\Temp
Output field reference
Every field in systeminfo answers a specific operational question. Use this table to map the line you care about to the right findstr pattern.
| Field | Use case | Notes |
|---|---|---|
Host Name | Identity | Same as %COMPUTERNAME% and hostname |
OS Name | Product SKU | "Windows 11 Pro" vs "Windows Server 2022 Datacenter" |
OS Version | Build identification | Format 10.0.<build> N/A Build <build> |
OS Manufacturer | Always "Microsoft Corporation" | rarely useful |
OS Configuration | Domain role | "Standalone Workstation", "Member Workstation", "Primary Domain Controller" |
OS Build Type | Free vs Checked | "Multiprocessor Free" = retail; "Checked" = debug |
Registered Owner / Registered Organization | OOBE values | from Windows setup |
Product ID | Activation lookup | 5-group format |
Original Install Date | Imaging audit | resets when OS is reinstalled |
System Boot Time | Uptime calculation | use for "uptime since last boot" |
System Manufacturer / System Model | Hardware | from SMBIOS |
System Type | Architecture | "x64-based PC", "ARM64-based PC" |
Processor(s) | CPU enumeration | One sub-line per socket |
BIOS Version | Firmware | format <vendor> <version>, <date> |
Windows Directory | Install location | usually C:\Windows |
System Directory | system32 path | |
Boot Device | Boot volume | \Device\HarddiskVolumeN |
System Locale / Input Locale | Localization | affects locale-sensitive output |
Time Zone | TZ display | matches tzutil /g |
Total Physical Memory | RAM total | reported in MB, with thousands separator |
Available Physical Memory | Free RAM | live value at query time |
Virtual Memory: Max Size / Available / In Use | Page file | helps diagnose commit pressure |
Page File Location(s) | pagefile paths | usually C:\pagefile.sys |
Domain | AD domain | WORKGROUP if not joined |
Logon Server | DC used at logon | \\<dc-name> |
Hotfix(s) | Patches | first line is the count; subsequent lines are KB IDs |
Network Card(s) | NICs | each NIC sub-block: name, DHCP, IPs |
Hyper-V Requirements | Virtualization | shows VM Monitor Mode Extensions, virtualization in firmware, SLAT, DEP |
Hyper-V requirements field
systeminfo's last few lines report Hyper-V hardware-virtualization requirements — useful when troubleshooting "Hyper-V can't start" or "WSL2 won't install".
systeminfo | findstr /C:"Hyper-V"
Output:
Hyper-V Requirements: VM Monitor Mode Extensions: Yes
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Data Execution Prevention Available: Yes
If you see A hypervisor has been detected. Features required for Hyper-V will not be displayed. — Hyper-V is already running, the requirement-detection layer can't query the hardware directly.
Uptime calculation from boot time
systeminfo reports the absolute boot time. Combine with a date math one-liner to get uptime in days/hours.
rem Boot time as a raw string
for /f "tokens=2,* delims=:" %%a in ('systeminfo ^| findstr /B /C:"System Boot Time"') do (
echo Boot:%%a%%b
)
Output:
Boot: 5/20/2026, 9:14:22 AM
rem PowerShell — better at date arithmetic
powershell -NoProfile -Command "(Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime"
Output:
Days : 5
Hours : 14
Minutes : 22
Seconds : 11
Milliseconds : 0
rem PowerShell — pretty-printed uptime
powershell -NoProfile -Command "$u=(Get-Date)-(gcim Win32_OperatingSystem).LastBootUpTime; '{0}d {1}h {2}m' -f $u.Days,$u.Hours,$u.Minutes"
Output: 5d 14h 22m
Get-ComputerInfo — PowerShell equivalent
Get-ComputerInfo is the modern PowerShell cmdlet that returns ~180 properties as an object — every field systeminfo shows plus many more (BIOS firmware type, secure boot state, device guard, WMI namespace versions). Use it when you need structured data instead of parseable text.
# Everything (slow — multi-second WMI walk)
Get-ComputerInfo
# A focused subset
Get-ComputerInfo -Property OsName, OsVersion, OsHardwareAbstractionLayer,
BiosManufacturer, BiosVersion,
CsManufacturer, CsModel, CsTotalPhysicalMemory,
CsProcessors, CsNumberOfLogicalProcessors,
OsLastBootUpTime, OsUptime,
HyperVRequirementVirtualizationFirmwareEnabled,
DeviceGuardSmartStatus
Output:
OsName : Microsoft Windows 11 Pro
OsVersion : 10.0.26100
OsHardwareAbstractionLayer : 10.0.26100.1
BiosManufacturer : ACME Corp
BiosVersion : {ACME Corp 1.2.3}
CsManufacturer : ACME Corp
CsModel : WorkStation 1000
CsTotalPhysicalMemory : 17179869184
CsProcessors : {Intel64 Family 6 Model 186}
CsNumberOfLogicalProcessors : 16
OsLastBootUpTime : 5/20/2026 6:30:00 AM
OsUptime : 5.14:22:11.0000000
HyperVRequirementVirtualizationFirmwareEnabled : True
DeviceGuardSmartStatus : Running
# Convert OsLocalDateTime/OsLastBootUpTime to friendly format
Get-ComputerInfo |
Select-Object @{N='HostName'; E={$_.CsName}},
@{N='OS'; E={$_.OsName}},
@{N='Build'; E={$_.OsVersion}},
@{N='RAM_GB'; E={[math]::Round($_.CsTotalPhysicalMemory/1GB,2)}},
@{N='Uptime'; E={(Get-Date) - $_.OsLastBootUpTime}}
Output:
HostName : MYHOST
OS : Microsoft Windows 11 Pro
Build : 10.0.26100
RAM_GB : 16
Uptime : 5.14:22:11
CIM / WMI alternatives
Get-ComputerInfo is convenient but slow. For one specific field, query CIM directly — 10-100× faster.
# OS build
(Get-CimInstance Win32_OperatingSystem).BuildNumber
Output: 26100
# Boot time / uptime in one shot
$os = Get-CimInstance Win32_OperatingSystem
[PSCustomObject]@{
Boot = $os.LastBootUpTime
Uptime = (Get-Date) - $os.LastBootUpTime
}
# Total RAM in GB
[math]::Round(
(Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
Output: 16
# Installed hotfixes (faster than parsing systeminfo)
Get-HotFix | Sort-Object InstalledOn -Descending |
Select-Object -First 10 HotFixID, Description, InstalledOn
Output:
HotFixID Description InstalledOn
-------- ----------- -----------
KB5034441 Security Update 5/15/2026 12:00:00 AM
KB5031356 Update 4/30/2026 12:00:00 AM
KB5028951 Security Update 4/15/2026 12:00:00 AM
...
# All NICs with IP addresses (richer than systeminfo's Network Card(s) block)
Get-NetIPConfiguration |
Select-Object InterfaceAlias, InterfaceDescription,
@{N='IPv4'; E={$_.IPv4Address.IPAddress -join ','}},
@{N='Gateway'; E={$_.IPv4DefaultGateway.NextHop}}
Hotfix queries
systeminfo lists every installed hotfix but truncates the list in CSV form. For hotfix-only audits, wmic qfe (legacy) or Get-HotFix (modern) are cleaner.
rem Confirm a specific KB is installed (exit code)
systeminfo | findstr "KB5034441" >NUL && echo Installed || echo NOT installed
Output: Installed
rem wmic — legacy but still installed in current Windows
wmic qfe get HotFixID,InstalledOn,Description /format:csv
Output:
Node,Description,HotFixID,InstalledOn
MYHOST,Security Update,KB5034441,5/15/2026
MYHOST,Update,KB5031356,4/30/2026
MYHOST,Security Update,KB5028951,4/15/2026
# Modern — Get-HotFix
Get-HotFix | Where-Object Description -eq 'Security Update' |
Sort-Object InstalledOn -Descending |
Format-Table HotFixID, InstalledOn, InstalledBy
Output:
HotFixID InstalledOn InstalledBy
-------- ----------- -----------
KB5034441 5/15/2026 12:00 AM NT AUTHORITY\SYSTEM
KB5028951 4/15/2026 12:00 AM NT AUTHORITY\SYSTEM
# Cross-fleet hotfix check
$hosts = 'srv01','srv02','srv03'
foreach ($h in $hosts) {
$hf = Invoke-Command -ComputerName $h `
-ScriptBlock { Get-HotFix -Id KB5034441 -ErrorAction SilentlyContinue }
[PSCustomObject]@{
Host = $h
Installed = if ($hf) { $hf.InstalledOn } else { 'MISSING' }
}
} | Format-Table -AutoSize
Output:
Host Installed
---- ---------
srv01 5/15/2026 12:00:00 AM
srv02 5/15/2026 12:00:00 AM
srv03 MISSING
Pairing with adjacent tools
systeminfo answers "what is this box?". The deepest answers come from combining it with the surrounding toolset:
| Need | Pair with | Why |
|---|---|---|
| Timezone confirmation | tzutil /g | systeminfo only shows display name; tzutil shows the registry ID |
| Clock-sync state | w32tm /query /status | Boot time means nothing if the clock is drifting |
| Driver inventory | driverquery | Hardware list + driver versions |
| Live performance | logman / htop for Linux comparison | Counter samples vs snapshot |
| Event correlation | wevtutil | Find errors at or after boot time |
| Power state | powercfg /a | Available sleep states the BIOS reports |
| Linux equivalent | htop, uname -a, uptime | For mixed-fleet inventories |
rem Combo snapshot for a support bundle
@echo off
set OUT=%TEMP%\snap_%COMPUTERNAME%.txt
echo === systeminfo === > %OUT%
systeminfo >> %OUT%
echo. >> %OUT%
echo === tzutil /g === >> %OUT%
tzutil /g >> %OUT%
echo. >> %OUT%
echo === w32tm /query /status === >> %OUT%
w32tm /query /status >> %OUT%
echo. >> %OUT%
echo === powercfg /a === >> %OUT%
powercfg /a >> %OUT%
echo. >> %OUT%
echo === Recent System errors === >> %OUT%
wevtutil qe System /q:"*[System[(Level=1 or Level=2) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" /c:10 /rd:true /f:text >> %OUT%
echo Snapshot: %OUT%
Output:
Snapshot: C:\Users\Alice\AppData\Local\Temp\snap_MYHOST.txt
Common pitfalls
- Slow on first run —
systeminfoqueries WMI and can take 15–30 seconds; don't use it in tight loops. - Remote queries need Remote Registry service — ensure the service is running on the target and that WMI/RPC ports (135, 445, 49152+) are open through any firewall.
- CSV has a single data row —
systeminfo /FO CSVproduces one header row and one data row (for the queried machine); it does not produce one row per remote host when scripting multiple machines. Loop withforand redirect to a single accumulating CSV. - Credentials in plaintext on the command line — avoid
/P passwordin scripts visible to other users; userunasor PowerShell'sGet-Credentialinstead. - Output encoding — the default output uses the system OEM code page; redirect to a file with
> file.txtand open with the matching encoding in your editor. - Hotfix list is locale-formatted — install dates appear as
mm/dd/yyyyon US English systems anddd/mm/yyyyelsewhere. Always sort byGet-HotFixInstalledOn(DateTime) for cross-locale scripts. Hyper-V Requirementsdisappears when Hyper-V is enabled — once the hypervisor runs, the field changes to a single warning line. Don't write parsers that assume the four sub-fields are always present.- Available Physical Memory is a snapshot — the value is the moment of the WMI call; for trending use
logmanorGet-Counter \Memory\Available MBytes. - Network adapter info omits disabled NICs —
systeminfoonly lists NICs inUporDisabled but boundstate; useGet-NetAdapterfor a complete list. - CSV row counting —
systeminfo /FO CSValways has exactly two lines (header + data). Tools like Power BI's "first row contains header" toggle work correctly out of the box.
Real-world recipes
Inventory OS build across a list of machines
@echo off
echo "Host","OS Version","Total RAM" > inventory.csv
for /f "delims=" %%h in (hostlist.txt) do (
for /f "tokens=1,3,10 delims=," %%a in (
'systeminfo /S %%h /FO CSV /NH 2^>NUL'
) do echo %%a,%%c,%%j >> inventory.csv
)
Output: (inventory.csv written with one row per host)
Check whether a specific hotfix is installed
systeminfo | findstr "KB5034441"
Output:
[03]: KB5034441
Get uptime from boot time
systeminfo | findstr /B /C:"System Boot Time"
Output:
System Boot Time: 28/04/2026, 06:30:00
Export full system report for a support ticket
systeminfo > %TEMP%\sysinfo_%COMPUTERNAME%_%DATE:~-4,4%%DATE:~-10,2%%DATE:~-7,2%.txt
echo Report saved to %TEMP%
Output:
Report saved to C:\Users\alicedev\AppData\Local\Temp
Full PowerShell fleet inventory
A one-liner fleet inventory using Get-ComputerInfo over Invoke-Command — the modern way.
$hosts = Get-Content C:\Audit\hostlist.txt
$report = foreach ($h in $hosts) {
try {
$info = Invoke-Command -ComputerName $h -ScriptBlock {
Get-ComputerInfo -Property CsName, OsName, OsVersion,
CsTotalPhysicalMemory, CsNumberOfLogicalProcessors,
OsLastBootUpTime
} -ErrorAction Stop
[PSCustomObject]@{
Host = $info.CsName
OS = $info.OsName
Build = $info.OsVersion
RAM_GB = [math]::Round($info.CsTotalPhysicalMemory/1GB,1)
Cores = $info.CsNumberOfLogicalProcessors
Uptime = (Get-Date) - $info.OsLastBootUpTime
Reachable = $true
}
} catch {
[PSCustomObject]@{
Host = $h
OS = ''
Reachable = $false
}
}
}
$report | Export-Csv -NoTypeInformation C:\Audit\fleet.csv
Output: (CSV with one row per host)
Build-number drift detection
A common audit question: are all machines on the latest patch tuesday build?
$expected = '10.0.26100'
Get-Content hostlist.txt | ForEach-Object {
$os = (Get-CimInstance -ComputerName $_ Win32_OperatingSystem).Version
[PSCustomObject]@{
Host = $_
Build = $os
Current = ($os -eq $expected)
}
} | Where-Object { -not $_.Current }
Output:
Host Build Current
---- ----- -------
srv03 10.0.22621 False
Daily inventory CSV with retention
$dir = 'D:\Inventory\daily'
$file = Join-Path $dir "inv_$(Get-Date -Format yyyy-MM-dd).csv"
New-Item -ItemType Directory -Force -Path $dir | Out-Null
systeminfo /FO CSV > $file
Get-ChildItem $dir -Filter 'inv_*.csv' |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) |
Remove-Item
Decode "OS Configuration" to a friendly role
The default text values are awkward; map to a one-word label for dashboards.
$role = switch -Wildcard ((Get-ComputerInfo).CsDomainRole) {
'StandaloneWorkstation' { 'Workstation' }
'MemberWorkstation' { 'Workstation' }
'StandaloneServer' { 'Server' }
'MemberServer' { 'Server' }
'BackupDomainController'{ 'DC' }
'PrimaryDomainController' { 'DC' }
default { 'Unknown' }
}
"$($env:COMPUTERNAME): $role"
Output: MYHOST: Workstation
Smoke test after a Windows Update
After Patch Tuesday, run a quick "did boot succeed?" check.
@echo off
systeminfo | findstr /B /C:"System Boot Time"
wevtutil qe System /q:"*[System[(EventID=6005 or EventID=6009) and TimeCreated[timediff(@SystemTime) <= 3600000]]]" /c:5 /rd:true /f:text
Output:
System Boot Time: 5/25/2026, 06:30:00
Event[0]:
Event ID: 6005
Description: The Event log service was started.
Sources
- systeminfo — Microsoft Learn — official syntax reference (last reviewed Feb 2026 for Windows 11 24H2 / Server 2025).
- Get-ComputerInfo — Microsoft Learn (PowerShell 7.5) — modern PowerShell equivalent returning ~180 typed properties.
- SYSTEMINFO command — SS64 — community switch reference cross-checked against current
/?output.