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