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); 

     } 

    } 
} 

在此先感谢。

+0

+1一个良好的心态。希望我知道psexec,所以我可以帮助你。 – 2011-04-13 03:27:32

+0

风格建议:您可以在顶部添加'使用SystemDiagnostics;'和'使用System.IO;'并使用'Process.Start(“CMD.exe”,psExec);'''File.Copy(fileToCopy, newLocation);''File.Delete(newFile);'事后。 – joce 2011-04-13 03:38:50

+0

有关它的任何解决方案? – Kiquenet 2012-01-09 14:05:25

从PSEXEC帮助:

-c指定的程序复制到远程系统 执行。如果省略此选项,应用程序 必须位于远程系统的系统路径中。

使用该标志使PSExec将要执行的批处理文件复制到远程系统并运行。您不必编写额外的代码来完成此操作。

基本上你想做的事:

psexec \\server cmd.exe /c file_you_want_to_run.bat 
+0

这是正确的。您可能必须使用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以指定可以为流程的执行设置的其他参数。

+0

我真的很感激你的答案,对于\\使用psexec部分运行批处理文件,我将如何获得它来执行复制到远程机器(字符串hostName)的批处理文件? – user704614 2011-04-13 11:48:47

+0

我不认为你可以在外国机器上执行代码。你可以在你的网络机器上执行批处理文件,但不能反其道而行。这将是一个严重的安全缺陷。 – joce 2011-04-13 22:51:36