Depois de pensar um pouco, percebi que o método WMIC é meio piegas. Uma maneira muito melhor de fazer isso é usar um script do PowerShell com a seguinte aparência:
[System.Diagnostics.Process[]] $processes64bit = @()
[System.Diagnostics.Process[]] $processes32bit = @()
foreach($process in get-process) {
$modules = $process.modules
foreach($module in $modules) {
$file = [System.IO.Path]::GetFileName($module.FileName).ToLower()
if($file -eq "wow64.dll") {
$processes32bit += $process
break
}
}
if(!($processes32bit -contains $process)) {
$processes64bit += $process
}
}
write-host "32-bit Processes:"
$processes32bit | sort-object Name | format-table Name, Id -auto
write-host ""
write-host "64-bit Processes:"
$processes64bit | sort-object Name | format-table Name, Id -auto
Se você copiar isso para um script do PowerShell, chamá-lo de process-width.ps1 e executá-lo no PowerShell, ele listará todos os processos de 32 bits seguidos pelos processos de 64 bits.
Ele faz isso verificando se um processo tem wow64.dll carregado como um módulo em seu espaço de processo. wow64.dll é a camada de emulação de 32 bits do Windows para sistemas operacionais de 64 bits. Ele só será carregado por processos de 32 bits, portanto, verificar isso é uma maneira segura de saber se um processo é de 32 bits ou não.
Isso deve funcionar muito melhor como uma solução a longo prazo.