在远程计算机上运行命令

时间:2013-01-21 15:59:11

标签: c# batch-file wmi remote-server wmi-service

我编写了一个wmi应用程序,它在远程计算机上运行批处理文件。

此批处理文件将输出写入作为参数传递给它的目录字符串。

当我启动我的应用程序,并选择驱动器C作为输出目录时,一切正常。 但是,当我选择网络驱动器时,由于某种原因它不起作用。

(此网络驱动器是公司的用户驱动器,并为网络上的每个用户映射)。

如果我从远程计算机中手动运行相同的命令(使用网络驱动器),它也可以正常工作......

ConnectionOptions connOptions = new ConnectionOptions();
connOptions.Impersonation = ImpersonationLevel.Impersonate;
connOptions.Username = sUsername;
connOptions.Password = sPassword;
connOptions.Authority = "NTLMDomain:" + sDomain;
connOptions.EnablePrivileges = true;
ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", sHost), connOptions);
manScope.Connect();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");

for (int i = 0; i < listOfJobs.Items.Count; i++)
{
   listOfJobs.SetSelected(i, true);
   inParams["CommandLine"] = listOfJobs.SelectedItem.ToString();
   ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
}

作业字符串示例:

  

工作脚本:C:\ Scripts \ BatchScript -p C:\ Test C:\ OutputDir

     

脚本失败:C:\ Scripts \ BatchScript -p C:\ Test U:\ OutputDir

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将ImpersonationLevel设置为Delegate。 Impersonate仅允许一个网络跃点,即服务器只能访问本地文件或客户端上的文件。访问第三台计算机(网络驱动器)意味着需要另一个跃点,因此需要委托。