我正在尝试使用powershell远程执行“forever”命令但是我收到了错误
'forever'未被识别为内部或外部命令
这是我正在做的事情。我有节点js脚本“MyNodeScript.js”,它执行forever命令。该脚本位于WebServer “MyWebServer1”上。 Node.Js和Forever全局安装在MyWebServer1上。
var exec = require('child_process').exec;
var _ = require('underscore');
var winston = require('winston');
var async = require('async');
var mycommand = 'forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js'
function start(callback) {
async.waterfall([
function (cb) {
executeCommand(mycommand, false, cb);
}
], function done(err) {
if (err) {
winston.error('failed to start all instances by forever:' + err);
} else {
winston.info('successfully started all instances by forever');
}
callback();
});
}
function executeCommand(command, skip, callback) {
async.waterfall([
function (cb) {
exec(command, cb);
}
], function done(err) {
if (err) {
if (skip) {
// skip the error
callback(null);
} else {
callback(err);
}
} else {
callback(null);
}
});
}
module.exports = {
executeCommand: executeCommand,
start: start
}
start(function(){});
在同一文件夹下的同一 MyWebServer1 上,我有一个名为“MyPowerShellScript.ps1”的powershell脚本,它调用此节点脚本。 powershell脚本只有一行
node D:\myfolder\maintenance\MyNodeScript.js
我可以在MyWebServer1上本地运行这个powershell脚本,它运行正常。但是,当我尝试执行此PowerShell脚本时,如下面的来自远程计算机
invoke-command -computername MyWebServer1 -filepath \\MyWebServer1\MyFolder\maintenance\MyPowerShellScript.ps1
我收到错误
错误:永远无法启动所有实例:错误:命令失败: C:\ Windows \ system32 \ cmd.exe / s / c“forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid“ServiceApp” ServiceApp.js“
+ CategoryInfo:NotSpecified :(错误:失败t ... ServiceApp.js“:String)[],RemoteException
+ FullyQualifiedErrorId:NativeCommandError
+ PSComputerName:MyWebServer1
'forever'不被认为是内部或外部命令,可操作程序或 批处理文件。
请注意,如果我更新“MyNodeScript.js”并使用完整物理路径进行永久命令,我可以远程执行脚本而不会出现任何错误
var mycommand = 'C:\\Users\\admin\\AppData\\Roaming\\npm\\forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js'
但是我想永远使用命令。该路径已在MyWebServer1上添加为环境变量
答案 0 :(得分:0)
尝试像这样调用ps1文件:
Invoke-Command -Scriptblock {powershell.exe -command {d:\blah\MyPowershellscript.ps1 } }
通过-filepath指定应远程执行的本地脚本文件。由于您的脚本存在于目标系统上,您可以省略它。