How to Find Your HWID on Windows, macOS and Linux
Use PowerShell, system settings or terminal commands to find MachineGuid, SMBIOS UUID, disk serials and other hardware identifiers on Windows, macOS and Linux.
HWID Checker Β· August 10, 2026 Β· 5 min read
If a game, software vendor or IT administrator asks for your HWID (hardware ID), first confirm which identifier they expect. βHWIDβ may mean a Windows MachineGuid, SMBIOS UUID, disk serial or a vendor-specific composite hash. The methods below show what each command returns instead of pretending there is one universal value.
Method 1 β Legacy Command Prompt (older Windows)
On older Windows installations, wmic can display the SMBIOS UUID supplied by the system firmware. On current Windows 11 releases, start with the PowerShell method below instead.
- Press
Win + R, typecmd, and press Enter. - Paste this command and press Enter:
wmic csproduct get uuid
- You'll see a line that looks like
3F2504E0-4F89-41D3-9A0C-0305E82C3301β that is your system's UUID, and for most purposes it is your HWID.
Windows 11 note:
wmicwas deprecated in Windows 10 21H1 and is disabled by default on a fresh Windows 11 24H2 installation. If the command is unavailable, use the PowerShell CIM command in Method 2.
Method 2 β PowerShell CIM (recommended on current Windows)
PowerShell's CIM cmdlets replace wmic and work on every current Windows version.
Get-CimInstance Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
Other useful one-liners:
# BIOS serial
Get-CimInstance Win32_BIOS | Select-Object -ExpandProperty SerialNumber
# Motherboard serial
Get-CimInstance Win32_BaseBoard | Select-Object -ExpandProperty SerialNumber
# Disk serials
Get-CimInstance Win32_DiskDrive | Select-Object Model, SerialNumber
# The Windows MachineGuid (what most licensing systems call "the HWID")
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Cryptography" | Select-Object -ExpandProperty MachineGuid
Method 3 β The registry MachineGuid
The value most Windows licensing systems actually use as "the HWID" is the MachineGuid stored in the registry. You can read it without PowerShell:
- Press
Win + R, typeregedit, press Enter. - Navigate to
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography. - Look for the
MachineGuidvalue β a UUID likea1b2c3d4-....
Or from the command line:
reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid
Method 4 β Device Manager (graphical, no command line)
If you prefer a graphical interface over the command line:
- Right-click the Start button and select Device Manager
- Expand any hardware category (e.g., Disk drives, Network adapters)
- Right-click a device and select Properties
- Go to the Details tab
- In the Property dropdown, select Hardware Ids
The values shown are the device's hardware identifiers as Windows sees them. These are the same identifiers that drivers use to match devices β and the same ones licensing systems can use.
Method 5 β macOS and Linux commands
If you are on a Mac or Linux machine, the commands are different but equally simple.
macOS
# Hardware UUID (the primary machine identifier)
system_profiler SPHardwareDataType | grep "Hardware UUID"
# Serial number
system_profiler SPHardwareDataType | grep "Serial Number"
# MAC address
ifconfig en0 | grep ether
Or get all hardware info at once:
system_profiler SPHardwareDataType
Linux
# Machine ID (distribution-level identifier)
cat /etc/machine-id
# Motherboard UUID (requires root)
sudo dmidecode -s system-uuid
# Disk serial numbers
lsblk --nodeps -o NAME,SERIAL
# MAC addresses
ip link show | grep ether
Method 6 β Portable Windows report and composite hash
The commands above each return one class of identifier. If you need a single report with the values available through Windows and your firmware, use the portable Windows utility.
Download HWID Checker for Windows β an approximately 2.4 MB x64 executable with no installer. Run it from Command Prompt or PowerShell to print the available identifiers and a composite SHA-256 HWID:
hwid-checker.exe -save # write to a timestamped .txt
hwid-checker.exe -json # output JSON for scripts
The utility processes the report locally and writes a file only when you use -save. A missing, generic or permission-restricted firmware value may be omitted from the output.
Which identifier do you actually need?
Different systems ask for different things under the name "HWID":
| What they probably want | Where it comes from | How to get it |
| --- | --- | --- |
| A UUID | SMBIOS UUID | PowerShell CIM command in Method 2 |
| The Windows MachineGuid | Registry | Method 3 above |
| A composite SHA-256 HWID | A normalized set of available identifiers | Method 6 |
| A MAC address | Network adapter | getmac or Get-NetAdapter |
| A disk serial | Physical storage device | PowerShell CIM command in Method 2 |
When in doubt, ask which field and format are required. Do not send a full report containing raw serial numbers when the recipient needs only one value.
Reading HWID in your own code
If you are building software that needs to identify a machine, here are minimal examples in three languages. Each one reads a few hardware identifiers and hashes them into a single fingerprint.
Go
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"os/exec"
"strings"
)
func main() {
uuid := powershell("(Get-CimInstance Win32_ComputerSystemProduct).UUID")
board := powershell("(Get-CimInstance Win32_BaseBoard).SerialNumber")
disk := powershell("(Get-CimInstance Win32_DiskDrive | ForEach-Object { $_.SerialNumber }) -join ','")
combined := strings.Join([]string{uuid, board, disk}, "|")
hash := sha256.Sum256([]byte(combined))
fmt.Println(hex.EncodeToString(hash[:]))
}
func powershell(command string) string {
out, _ := exec.Command("powershell", "-NoProfile", "-Command", command).Output()
return strings.TrimSpace(string(out))
}
C# (.NET)
using System.Management;
using System.Security.Cryptography;
using System.Text;
string cpu = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor")
.Get().Cast<ManagementObject>().First()["ProcessorId"].ToString();
string board = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard")
.Get().Cast<ManagementObject>().First()["SerialNumber"].ToString();
string disk = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_DiskDrive")
.Get().Cast<ManagementObject>().First()["SerialNumber"].ToString();
string combined = $"{cpu}-{board}-{disk}";
byte[] hash = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(combined));
Console.WriteLine(Convert.ToHexString(hash));
Note:
System.Managementrequires theSystem.ManagementNuGet package on .NET Core 3.1+ and .NET 5+.
Python
import subprocess, hashlib
def powershell(command):
result = subprocess.run(
["powershell", "-NoProfile", "-Command", command],
capture_output=True, text=True, check=True
)
return result.stdout.strip()
uuid = powershell("(Get-CimInstance Win32_ComputerSystemProduct).UUID")
board = powershell("(Get-CimInstance Win32_BaseBoard).SerialNumber")
disk = powershell("(Get-CimInstance Win32_DiskDrive | % SerialNumber) -join ','")
fingerprint = hashlib.sha256(f"{uuid}|{board}|{disk}".encode()).hexdigest()
print(fingerprint)
A note on the CPU ProcessorId: The value returned by
wmic cpu get ProcessorId(or the CPUID instruction) encodes the CPU's vendor, family, model and stepping β it is not a unique per-chip serial. Two CPUs of the same model return the same ProcessorId. It is useful as one component of a composite fingerprint, but not sufficient to uniquely identify a machine on its own.
Production systems must also handle generic serials, permissions, virtual machines, normalization and legitimate hardware changes. See the project repository for the Windows CLI source and build instructions.
Want to check an HWID someone sent you?
If you already have an HWID string and want to know what format it is, whether it is valid, or check it against a list, paste it into our online HWID checker. It runs entirely in your browser β nothing is uploaded.