C#在PsExec启动后在远程机器上运行批处理文件
基本上,我试图运行在远程机器上复制的批处理文件,顺便说一句,这是我第一次尝试编码,所以请好好但如果你愿意的话,可以批评它,但我仍然在学习这门语言,不得不花上3个小时才能得到这样的结果,感谢上帝给Google,LOL。C#在PsExec启动后在远程机器上运行批处理文件
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cleanerBtn_Click(object sender, EventArgs e)
{
//Copying Batch File to Remote Host
string fileToCopy = "C:\\Clean.bat";
string newLocation = hostName.Text;
string newFile = (newLocation + "\\clean.bat");
System.IO.File.Copy(fileToCopy, newLocation);
//Run PsExec
string psExec = "psexec -s "+newLocation+" cmd";
System.Diagnostics.Process.Start("CMD.exe", psExec);
//Run Batch File using PsExec
//Removing Batch File from Remote Host
System.IO.File.Delete(newFile);
}
}
}
在此先感谢。
从PSEXEC帮助:
-c指定的程序复制到远程系统 执行。如果省略此选项,应用程序 必须位于远程系统的系统路径中。
使用该标志使PSExec将要执行的批处理文件复制到远程系统并运行。您不必编写额外的代码来完成此操作。
基本上你想做的事:
psexec \\server cmd.exe /c file_you_want_to_run.bat
这是正确的。您可能必须使用psexec的用户名/密码标志,但不需要编写任何自己的代码来实现此目的。 – coffeetocode 2011-04-13 23:29:11
尝试使用/ C运行CMD.exe。从cmd.exe的帮助:
/C执行字符串指定的命令,然后终止
的/ C需要被附加到PSEXEC的内容:
System.Diagnostics.Process.Start("CMD.exe", "/C " + psExec);
我相信你会得到预期的结果。如果不是,您可能需要确保psexec.exe
位于PATH环境变量中的目录中。
此外,您可能有兴趣查看ProcessStartInfo以指定可以为流程的执行设置的其他参数。
我真的很感激你的答案,对于\\使用psexec部分运行批处理文件,我将如何获得它来执行复制到远程机器(字符串hostName)的批处理文件? – user704614 2011-04-13 11:48:47
我不认为你可以在外国机器上执行代码。你可以在你的网络机器上执行批处理文件,但不能反其道而行。这将是一个严重的安全缺陷。 – joce 2011-04-13 22:51:36
+1一个良好的心态。希望我知道psexec,所以我可以帮助你。 – 2011-04-13 03:27:32
风格建议:您可以在顶部添加'使用SystemDiagnostics;'和'使用System.IO;'并使用'Process.Start(“CMD.exe”,psExec);'''File.Copy(fileToCopy, newLocation);''File.Delete(newFile);'事后。 – joce 2011-04-13 03:38:50
有关它的任何解决方案? – Kiquenet 2012-01-09 14:05:25