我想执行“永远”远程命令使用PowerShell,但我得到的错误如何远程执行远程命令而不使用完整路径?
'forever' is not recognized as an internal or external command
下面是我在做什么。我有执行永久命令的节点js脚本“MyNodeScript.js”。该脚本位于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同一文件夹下,我有一个PowerShell脚本“MyPowerShellScript.ps1”,它把这个节点脚本。 PowerShell脚本只有一行
node D:\myfolder\maintenance\MyNodeScript.js
我可以MyWebServer1本地运行此PowerShell脚本,它工作正常。但是,当我试图从远程计算机上执行此PowerShell脚本如下
invoke-command -computername MyWebServer1 -filepath \\MyWebServer1\MyFolder\maintenance\MyPowerShellScript.ps1
我收到错误
error: failed to start all instances by forever:Error: Command failed: C:\Windows\system32\cmd.exe /s /c "forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js"
+ CategoryInfo : NotSpecified: (error: failed t...ServiceApp.js":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : MyWebServer1
'forever' is not recognized as an internal or external command, operable program or batch file.
请注意,我可以远程执行该脚本没有任何错误,如果我更新“ 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
我收到错误“powershell.exe:术语”节点“不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,验证路径是否正确,然后再试一次。“这里是我试过的命令“Invoke-Command-Scriptblock {powershell.exe -command {\ MyWebServer1 \ MyFolder \ maintenance \ MyPowerShellScript.ps1}}” – LP13
注意MyPowerShellScript.ps1在远程机器上(即MyWebServer1)和\\ MyWebServer1 \ MyFolder \ i共享文件夹,以便其他机器可以访问上述建议中的所有文件 – LP13
它如何知道哪个远程机器MyPowershellscript.ps1存在?我们不得不添加 - 计算机名称开关 – LP13