0

我编写了一个在远程机器上运行批处理文件的 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

有任何想法吗?

4

1 回答 1

0

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

于 2013-01-21T16:45:26.267 回答