如何在远程计算机上执行命令?
我有一个服务器上的共享文件夹,我需要远程执行一些文件的命令。 我怎么做?
需要在服务器上运行哪些服务才能使其工作?
一些细节:只能使用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。
- 在目标机器上,从命令提示符处运行
dcomcnfg
。 - 展开
Component Services\Computers\My Computer\DCOM Config
- 查找GUID
8BC3F05E-D86B-11D0-A075-00C04FB68820
(可以在详细信息视图中查看)标识的Windowspipe理指令。 - 编辑属性,然后在权限选项卡下添加您尝试login的用户名。
- 您可能需要重新启动服务或整个机器。
注:用于远程进程的所有path都必须位于目标机器的本地。
你可以使用SysInternal的PsExec 。
海事组织,在你的情况下,你可以试试这个:
- 将共享文件夹映射到计算机上的驱动器或文件夹。 ( 这是如何 )
- 像通常的本地文件一样访问映射的驱动器/文件夹。
什么都不需要安装。 除了启用文件夹共享之外,不需要运行任何服务。
如果您可以访问共享文件夹并将其映射到您的计算机上,那么大多数情况下应该像本地文件一样工作,包括命令提示符和所有资源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>
没有比这更简单:)