如何在远程计算机中执行命令?

时间:2009-01-09 14:40:28

标签: c# .net process command

我在服务器中有一个共享文件夹,我需要远程执行某些文件的命令。我怎么做?

需要在服务器上运行哪些服务才能使其正常工作?

一些细节:只能使用C#。服务器中无法安装任何内容。

5 个答案:

答案 0 :(得分:32)

另一种解决方案是使用WMI.NET or Windows Management Instrumentation

  

使用.NET Framework命名空间System.Management,您可以使用Windows Management Instrumentation(WMI)自动执行管理任务。

代码示例

var processToRun = new[] { "notepad.exe" };
var connection = new ConnectionOptions();
connection.Username = "username";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);

如果您在身份验证方面遇到问题,请检查DCOM配置。

  1. 在目标计算机上,从命令提示符运行dcomcnfg
  2. 展开Component Services\Computers\My Computer\DCOM Config
  3. 查找使用GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820标识的Windows管理说明(您可以在详细信息视图中看到这一点)。
  4. 编辑属性,然后在权限选项卡下添加您尝试登录的用户名。
  5. 您可能需要重启服务或整台计算机。
  6. 注意:用于远程进程的所有路径都必须是目标计算机的本地路径。

答案 1 :(得分:6)

您可以使用SysInternal的PsExec

答案 2 :(得分:0)

IMO,在你的情况下你可以试试这个:

  
      
  1. 将共享文件夹映射到计算机上的驱动器或文件夹。 (here's how
  2.   
  3. 像往常一样访问映射的驱动器/文件夹。
  4.   

无需安装任何东西。除启用文件夹共享的服务外,不需要运行任何服务。

如果您可以访问共享文件夹并将其映射到您的计算机上,那么大多数内容应该像本地文件一样工作,包括命令提示和所有资源管理器增强工具。

这与使用PsExec(或RDP-ing)不同,因为您不需要在远程服务器上拥有管理权限和/或远程桌面/终端服务连接权限,您只需要能够访问这些权限共享文件夹。

另外,请确保您拥有所有必要的安全权限,以便运行您希望在这些共享文件夹上运行的任何命令/工具。


如果您希望在目标计算机上完成的处理,那么您可以尝试PsExec作为@divo和@recursive指出,其中包括:

PsExec \\yourServerName -u yourUserName cmd.exe

将为您提供远程计算机上的命令提示符。从那里你可以执行你想要的任何事情。

我不确定,但我认为您需要运行服务器(lanmanserver)或终端服务(TermService)服务(应该已经在运行)。

答案 3 :(得分:0)

try
{
    string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\";
    string strFilePath = AppPath + "ABCED120D_XXX.bat";
    System.Diagnostics.Process proc = new System.Diagnostics.Process();

    proc.StartInfo.FileName = strFilePath;
    string pwd = "s44erver";

    proc.StartInfo.Domain = "abcd";
    proc.StartInfo.UserName = "sysfaomyulm";

    System.Security.SecureString secret = new System.Security.SecureString();
    foreach (char c in pwd)

        secret.AppendChar(c);

    proc.StartInfo.Password = secret;
    proc.StartInfo.UseShellExecute = false;

    proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin ";

    proc.Start();
    while (!proc.HasExited)
    {
        proc.Refresh();
        // Thread.Sleep(1000);
    }

    proc.Close();
}
catch (Exception ex)
{
    throw ex;
}

答案 4 :(得分:-2)

我使用名为execcmd.exe的{​​{3}}附带的小实用程序。其语法如下:

execcmd \\yourremoteserver <your command here>

没有比这更简单:)