exec('command', {'shell':'powershell.exe'}, (error, stdout, stderr) => { ... } falla con el siguiente error:
/d : The term '/d' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + /d /s /c command + ~~ + CategoryInfo : ObjectNotFound: (/d:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException ¿Qué es anteponer /d /s /c y cómo se puede prevenir?
Su síntoma implica que está utilizando una versión anterior de Node.js.
Actualice al menos a v11.15.0 para que su código funcione.
En versiones anteriores, las opciones de la línea de comandos /d /s /c se usaban invariablemente , independientemente del ejecutable que haya especificado para shell , y dado que powershell.exe no comprende estas opciones, los comandos fallaban invariablemente.
Desde v11.15.0, -c ahora se usa para cualquier shell que no sea cmd.exe , que PowerShell sí entiende.
Puede usar el siguiente comando de prueba de PowerShell para ver si su versión de Node.js es lo suficientemente reciente:
# Run from PowerShell. # If your Node.Js version is recent enough, you'll see PowerShell's version info, # otherwise, an error will occur. node -pe "child_process.execSync('`$PSVersionTable', { shell: 'powershell.exe' }).toString()"