exec('command', {'shell':'powershell.exe'}, (error, stdout, stderr) => { ... }
fails with the following 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
What is prepending the /d /s /c
and how can it be prevented?
CodePudding user response:
Your symptom implies that you're using an old Node.js version.
Upgrade to at least
v11.15.0
to make your code work.
In versions before that, the command-line options /d /s /c
were invariably used, irrespective of what executable you specified for shell
- and since powershell.exe
doesn't understand these options, commands invariably failed.
Since v11.15.0, -c
is now used for any shell other than cmd.exe
, which PowerShell does understand.
You can use the following test command from PowerShell to see if your Node.js version is recent enough:
# 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()"