Node execute PS script добавляет завершающиеся сбоем параметры

#javascript #node.js #powershell

#javascript #node.js #powershell

Вопрос:

exec('command', {'shell':'powershell.exe'}, (error, stdout, stderr) => { ... } сбой со следующей ошибкой:

 /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
 

Что предшествует /d /s /c и как это можно предотвратить?

Ответ №1:

  • Ваш симптом подразумевает, что вы используете старый Node.js версия.
  • Обновите, по крайней мере v11.15.0 , чтобы заставить ваш код работать.

В версиях до этого /d /s /c неизменно использовались параметры командной строки, независимо от того, для какого исполняемого файла вы указали shell , и поскольку powershell.exe он не понимает эти параметры, команды неизменно завершались ошибкой.

Начиная с версии 11.15.0, -c теперь используется для любой оболочки, отличной от, которую понимает PowerShell. cmd.exe

Вы можете использовать следующую тестовую команду из PowerShell, чтобы проверить, является ли ваш Node.js версия достаточно свежая:

 # 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()"