Tools
Spec summary script (optional)
A short, open-source PowerShell script that prints your PC's hardware details so you can paste them into a listing. You never have to run it. You can type specs in yourself or paste from PCPartPicker, dxdiag or Speccy instead.
What it does, and doesn't do
- It reads hardware info with standard Windows commands.
- It prints a summary and copies it to your clipboard.
- It doesn't change any settings or install anything.
- It doesn't send anything anywhere. There's no internet access in it at all.
- You can read every line below before running it.
How to use it (Windows 10/11)
- Copy the script below with the Copy button.
- Open the Start menu, type PowerShell and open it (no admin needed).
- Right-click in the window to paste, then press Enter.
- The summary is copied for you. Paste it into Import specs when creating a listing.
spec-summary.ps1
<#
RigYard spec summary script (v1)
----------------------------------------------------------------------------
OPTIONAL and open source. You never have to run this to sell on RigYard.
What it does: reads your PC's hardware details using standard Windows
commands (Get-CimInstance / Get-PhysicalDisk) and prints a
short summary, which it also copies to your clipboard.
What it doesn't: change any settings, install anything, or send any data
anywhere. Read it below before running it.
How to run: open PowerShell (Start menu > type "PowerShell"), paste this
whole script in and press Enter. Then paste the result into
the "Import specs" box on https://www.rigyard.co.uk/sell
#>
$ErrorActionPreference = 'SilentlyContinue'
$out = New-Object System.Collections.Generic.List[string]
$out.Add('=== RigYard spec summary v1 ===')
# System (skipped for custom builds, which only report firmware placeholders or the board name)
$cs = Get-CimInstance Win32_ComputerSystem
$product = Get-CimInstance Win32_ComputerSystemProduct
$board = Get-CimInstance Win32_BaseBoard
$placeholder = 'Default string|To be filled|System Product Name|System Version|O\.E\.M\.|Not Applicable'
$model = if ($product.Version -and $product.Version -notmatch $placeholder -and $product.Version.Length -gt 3) { $product.Version } else { $cs.Model }
if ($cs.Manufacturer -and $model -and $model -notmatch $placeholder -and $model.Trim() -ne "$($board.Product)".Trim()) {
$out.Add("System: $($cs.Manufacturer.Trim()) $($model.Trim())")
}
# CPU (Windows can under-report cores when some are parked or limited, so take the larger figures)
$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
if ($cpu) {
$cores = $cpu.NumberOfCores
if ($cpu.Name -match '(\d+)-Core') { $cores = [math]::Max($cores, [int]$Matches[1]) }
$threads = [math]::Max([int]$cpu.NumberOfLogicalProcessors, [int]$cpu.ThreadCount)
$out.Add("CPU: $($cpu.Name.Trim()) | Cores: $cores | Threads: $threads")
}
# GPUs (VRAM from the registry, because Win32_VideoController caps it at 4 GB)
$vram = @{}
Get-ChildItem 'HKLM:\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}' |
ForEach-Object {
$p = Get-ItemProperty $_.PSPath
if ($p.DriverDesc -and $p.'HardwareInformation.qwMemorySize') { $vram[$p.DriverDesc] = [math]::Round($p.'HardwareInformation.qwMemorySize' / 1GB) }
}
foreach ($gpu in Get-CimInstance Win32_VideoController) {
if ($gpu.Name -match 'Basic Display|Remote Display|Virtual') { continue }
$gb = $vram[$gpu.Name]
if (-not $gb -and $gpu.AdapterRAM -gt 0) { $gb = [math]::Round($gpu.AdapterRAM / 1GB) }
$line = "GPU: $($gpu.Name.Trim())"
if ($gb) { $line += " | VRAM: $gb GB" }
$out.Add($line)
}
# Memory
$sticks = @(Get-CimInstance Win32_PhysicalMemory)
if ($sticks.Count -gt 0) {
$total = [math]::Round((($sticks | Measure-Object Capacity -Sum).Sum) / 1GB)
$speed = ($sticks | Select-Object -First 1).ConfiguredClockSpeed
if (-not $speed) { $speed = ($sticks | Select-Object -First 1).Speed }
$types = @{ 20 = 'DDR'; 21 = 'DDR2'; 24 = 'DDR3'; 26 = 'DDR4'; 30 = 'LPDDR4'; 34 = 'DDR5'; 35 = 'LPDDR5' }
$type = $types[[int]($sticks | Select-Object -First 1).SMBIOSMemoryType]
$sizes = $sticks | Group-Object { [math]::Round($_.Capacity / 1GB) } | ForEach-Object { "$($_.Count) x $($_.Name) GB" }
$line = "RAM: $total GB"
if ($speed) { $line += " | Speed: $speed MT/s" }
if ($type) { $line += " | Type: $type" }
$line += " | Sticks: $($sizes -join ' + ')"
$out.Add($line)
}
# Motherboard
if ($board.Product) { $out.Add("Motherboard: $($board.Manufacturer.Trim()) $($board.Product.Trim())") }
# Storage
$disks = @(Get-PhysicalDisk)
if ($disks.Count -gt 0) {
foreach ($d in $disks) {
if ($d.BusType -eq 'USB') { continue }
$kind = if ($d.BusType -eq 'NVMe') { 'NVMe' } elseif ($d.MediaType -eq 'SSD') { 'SATA SSD' } elseif ($d.MediaType -eq 'HDD') { 'HDD' } else { 'SSD' }
$out.Add("Storage: $($d.FriendlyName.Trim()) | Size: $([math]::Round($d.Size / 1GB)) GB | Type: $kind")
}
} else {
foreach ($d in Get-CimInstance Win32_DiskDrive) {
if ($d.InterfaceType -eq 'USB') { continue }
$out.Add("Storage: $($d.Model.Trim()) | Size: $([math]::Round($d.Size / 1GB)) GB | Type: $($d.InterfaceType)")
}
}
# Operating system
$os = Get-CimInstance Win32_OperatingSystem
if ($os) { $out.Add("OS: $($os.Caption.Trim()) | Build $($os.BuildNumber)") }
# Screen (laptops and all-in-ones)
$panel = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams | Select-Object -First 1
$video = Get-CimInstance Win32_VideoController | Where-Object { $_.CurrentHorizontalResolution } | Select-Object -First 1
if ($panel -and $panel.MaxHorizontalImageSize -gt 0 -and ($cs.PCSystemType -eq 2 -or $cs.PCSystemTypeEx -eq 2)) {
$inches = [math]::Round([math]::Sqrt([math]::Pow($panel.MaxHorizontalImageSize, 2) + [math]::Pow($panel.MaxVerticalImageSize, 2)) / 2.54, 1)
$out.Add("Screen: $inches in | Resolution: $($video.CurrentHorizontalResolution)x$($video.CurrentVerticalResolution) | Refresh: $($video.CurrentRefreshRate) Hz")
}
# Battery health (laptops)
$full = (Get-CimInstance -Namespace root\wmi -ClassName BatteryFullChargedCapacity | Select-Object -First 1).FullChargedCapacity
$design = (Get-CimInstance -Namespace root\wmi -ClassName BatteryStaticData | Select-Object -First 1).DesignedCapacity
$cycles = (Get-CimInstance -Namespace root\wmi -ClassName BatteryCycleCount | Select-Object -First 1).CycleCount
if ($full -and $design) {
$line = "Battery: Health: $([math]::Min(100, [math]::Round($full / $design * 100)))%"
if ($cycles) { $line += " | Cycles: $cycles" }
$out.Add($line)
}
# Wi-Fi
$wifi = Get-NetAdapter -Physical | Where-Object { $_.InterfaceDescription -match 'Wi-?Fi|Wireless|802\.11|WLAN' } | Select-Object -First 1
if ($wifi) {
$gen = if ($wifi.InterfaceDescription -match 'Wi-?Fi\s*7|BE\d{3}') { 'Wi-Fi 7' } elseif ($wifi.InterfaceDescription -match '6E|AXE\d{3}|AX21\d') { 'Wi-Fi 6E' } elseif ($wifi.InterfaceDescription -match 'Wi-?Fi\s*6|AX\d{3}') { 'Wi-Fi 6' } else { 'Wi-Fi' }
$out.Add("WiFi: $gen")
}
$out.Add('=== end ===')
$text = $out -join [Environment]::NewLine
Write-Host ''
Write-Host $text
Write-Host ''
try { Set-Clipboard -Value $text; Write-Host 'Copied to your clipboard. Paste it into "Import specs" on https://www.rigyard.co.uk/sell' -ForegroundColor Green } catch { Write-Host 'Copy the lines above and paste them into "Import specs".' }
If you download the file instead of pasting it, Windows may block scripts from the internet. Right-click the file → Properties → tick Unblock, or run it with powershell -ExecutionPolicy Bypass -File .\spec-summary.ps1.