我在服务器中有一个共享文件夹,我需要远程执行某些文件的命令。我怎么做?
需要在服务器上运行哪些服务才能使其正常工作?
一些细节:只能使用C#。服务器中无法安装任何内容。
答案 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配置。
dcomcnfg
。 Component Services\Computers\My Computer\DCOM Config
8BC3F05E-D86B-11D0-A075-00C04FB68820
标识的Windows管理说明(您可以在详细信息视图中看到这一点)。注意:用于远程进程的所有路径都必须是目标计算机的本地路径。
答案 1 :(得分:6)
您可以使用SysInternal的PsExec。
答案 2 :(得分:0)
IMO,在你的情况下你可以试试这个:
- 将共享文件夹映射到计算机上的驱动器或文件夹。 (here's how)
- 像往常一样访问映射的驱动器/文件夹。
醇>
无需安装任何东西。除启用文件夹共享的服务外,不需要运行任何服务。
如果您可以访问共享文件夹并将其映射到您的计算机上,那么大多数内容应该像本地文件一样工作,包括命令提示和所有资源管理器增强工具。
这与使用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>
没有比这更简单:)