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

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

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

一些细节:只能使用C#。 什么都不能安装在服务器上。

另一个解决scheme是使用WMI.NET或Windows Management Instrumentation 。

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

代码示例

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

如果您在身份validation方面遇到问题,请检查DCOMconfiguration。

  1. 在目标机器上,从命令提示符处运行dcomcnfg
  2. 展开Component Services\Computers\My Computer\DCOM Config
  3. 查找GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820 (可以在详细信息视图中查看)标识的Windowspipe理指令。
  4. 编辑属性,然后在权限选项卡下添加您尝试login的用户名。
  5. 您可能需要重新启动服务或整个机器。

注:用于远程进程的所有path都必须位于目标机器的本地。

你可以使用SysInternal的PsExec 。

海事组织,在你的情况下,你可以试试这个:

  1. 将共享文件夹映射到计算机上的驱动器或文件夹。 ( 这是如何 )
  2. 像通常的本地文件一样访问映射的驱动器/文件夹。

什么都不需要安装。 除了启用文件夹共享之外,不需要运行任何服务。

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

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

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


如果你希望在目标机器完成处理,那么你可以尝试PsExec作为@divo和@recursive指出的,

 PsExec \\yourServerName -u yourUserName cmd.exe 

这将带给你一个远程机器的命令提示符。 从那里你可以执行任何你想要的。

我不知道,但我认为你需要服务器( lanmanserver )或terminal服务( TermService )服务运行(应该已经运行)。

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

我使用了PureMPI.net自带的小实用程序execcmd.exe 。 其语法如下:

 execcmd \\yourremoteserver <your command here> 

没有比这更简单:)