Short answer: there’s no single global “Serial Enumerator” registry switch — the advanced FTDI checkbox is a per-device driver property stored under that device’s hardware key (HKLM\SYSTEM\CurrentControlSet\Enum\…\Device Parameters) or written by the FTDI INF at install. You can therefore either (A) discover the exact value the FTDI GUI toggles and change that registry value for every device with PowerShell, or (B) make the change persistent by adding the value to the FTDI INF (AddReg) so Windows writes it at install. Both approaches require admin. I’ll give you ready-to-run PowerShell to do diagnostics + the registry-change bulk script and the INF approach to deploy permanently. (Background: Device Manager advanced properties are driven by per‑device Device Parameters and driver INF AddReg entries — see below.
1) Quick diagnostic — find the device and the Device Parameters path
Run PowerShell elevated (Right‑click → Run as Administrator). This finds FTDI COM ports and prints the exact Enum path where Device Parameters live:
$ports = Get-PnpDevice -Class Ports | Where-Object { $
.Manufacturer -like 'FTDI' -and $.InstanceId }
$ports | Format-List FriendlyName,InstanceId,Status
pick one InstanceId from the output and paste it back if you want me to tailor the next step
This tells us the InstanceId you’ll use to inspect the device registry key. The advanced checkbox state is usually stored under that device instance’s "Device Parameters" key.
2) Read all values under Device Parameters (before toggling the GUI)
Run this (replace the $inst value with one InstanceId string from step 1):
$inst = 'FTDIBUS\VID_0403+PID_6001+XXXXXXXX\0000' # example — paste the exact InstanceId
$enumBase = "HKLM:\SYSTEM\CurrentControlSet\Enum"
$regPath = Join-Path $enumBase ($inst -replace '\','\') # builds the full path
$dp = Join-Path $regPath 'Device Parameters'
Get-ItemProperty -Path $dp -ErrorAction SilentlyContinue | Format-List * | Out-File "$env:USERPROFILE\Desktop\FTDI_before.txt"
3) Toggle the Serial Enumerator checkbox once in Device Manager (Advanced) for that single device, then capture the values again:
Get-ItemProperty -Path $dp -ErrorAction SilentlyContinue | Format-List * | Out-File "$env:USERPROFILE\Desktop\FTDI_after.txt"
Open both files and diff them (or paste them here). The property name that changed is the one the GUI controls — once you tell me which value changed I’ll give the exact one-line Set-ItemProperty command to flip it for all devices.
If you prefer an automated registry-diff instead of manual compare, run this (elevated) to produce the difference file:
$before = Get-ItemProperty -Path $dp -ErrorAction SilentlyContinue | ConvertTo-Json -Depth 3
toggle GUI now
Start-Sleep -Seconds 2 # give you 2 seconds to toggle (or pause and toggle manually)
$after = Get-ItemProperty -Path $dp -ErrorAction SilentlyContinue | ConvertTo-Json -Depth 3
$diff = Compare-Object (ConvertFrom-Json $before | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name) (ConvertFrom-Json $after | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name) -PassThru
(For value changes you may want a proper JSON compare; easiest is the two text files above.
4) Bulk PowerShell to set the discovered registry value for all FTDI devices
Once you know the exact property name (I’ll call it <PropertyName> below), run this elevated script to set it to the desired value for every FTDI instance in Enum. Replace <PropertyName> and <Value> with the real name and value you discovered:
Run as Administrator
$prop = '<PropertyName>' # e.g. 'UserSetDeviceIdleEnabled' or whatever you discovered
$value = <Value> # e.g. 0
Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Enum' -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.PSPath -match 'VID
0403|FTDIBUS' } |
ForEach-Object {
$dp1 = Join-Path $.PSPath 'Device Parameters'
$dp2 = Join-Path $
.PSPath '0000\Device Parameters'
foreach ($dp in @($dp1, $dp2) {
if (Test-Path $dp) {
try {
New-ItemProperty -Path $dp -Name $prop -Value $value -PropertyType DWord -Force -ErrorAction Stop
Write-Output "Updated $dp\$prop"
} catch {
Write-Warning "Failed $dp : $($.Exception.Message)"
}
}
}
}
Important notes about this approach
- Must run elevated. Enum keys are protected and you may get Access Denied on some machines; if that happens paste the error and I’ll show safer alternatives.
- This is immediate but fragile: driver reinstall / re-enumeration can overwrite the value. For a persistent deployment use the INF method below.
5) Persistent (recommended) — add the value to the FTDI INF (AddReg)
If the GUI change is overwritten by the INF, edit the FTDI INF so Windows writes the property during device install. Steps:
- Find the published INF: Device Manager → device → Details → “Inf Name” (shows oem##.inf) or run pnputil /enum-drivers and search for FTDI. The original package is in C:\Windows\System32\DriverStore\FileRepository\… (look for folder with ftdibus/ftdiport).
- Edit the INF and add an AddReg section under the device install section (HKR is relative to the device instance). Example AddReg lines (illustrative — use the exact property name you discovered):
[MyFTDI.AddReg]
HKR,,<PropertyName>,0x00010001,<Value>
Then add this AddReg entry into the install section:
[MyFTDI.Install] ; or whatever the device Install section is called
AddReg = MyFTDI.AddReg
- Publish/install the INF: pnputil /add-driver "C:\Path\to\modified.inf" /install and then replug the device (or use devcon/pnputil to force reinstall). For enterprise deployment sign the package and push via SCCM/Intune. Remember modifying INF affects driver signature; on 64‑bit Windows you must sign the package for production.
6) If you want, I’ll do the rest for you
- If you run the diagnostic steps and paste the FTDI_before.txt and FTDI_after.txt files (or paste the single InstanceId and the registry diff), I’ll tell you the exact PowerShell command/property name and give a tested multi‑PC script you can push via PSRemoting/Intune/SCCM.
- Or paste the Device Manager “Inf Name” and I’ll produce the exact AddReg snippet to paste into that INF and the pnputil commands to deploy.
Which do you want me to do next — run the registry-diff routine and paste the two output files here, or paste one sample InstanceId (from Get-PnpDevice) and I’ll craft a one-liner to set the value across all devices?