Home > Mobile >  Node execute PS script prepends options that fail
Node execute PS script prepends options that fail

Time:12-10

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()"
  • Related