我正在尝试使用Win32_Process
在远程计算机上运行一些命令,但我无法让它工作。
这是我先试过的:
var processClass = new ManagementClass(@"\\server.domain.co.uk\root\cimv2:Win32_Process");
var inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = @"echo. 2>C:\users\user.name\desktop\EmptyFile.txt";
inParams["CurrentDirectory"] = @"C:\windows\system32";
var outParams = processClass.InvokeMethod("Create", inParams, null);
但没有任何反应。我也尝试在root\cimv2:Win32_Process
本地运行它,但是再次没有效果。在调用notepad.exe
而不是命令行时,我能够在本地工作,但这在远程计算机上不起作用。
我如何解决这个问题?
在outParams
,System.Management.ManagementBaseObject
,我可以看到ClassPath
包含值Evaluation timed out
- 这可能是为什么它不是'工作?
答案 0 :(得分:0)
在阅读并运行一些测试之后,它似乎与CScript
,these processes cannot be made interactive开始的类似:
您可以使用Win32_Process.Create在远程计算机上执行脚本或应用程序。但是,出于安全原因,该流程无法进行交互式。在本地计算机上调用Win32_Process.Create时,该过程可以是交互式的。
我仍然有点困惑,因为上面运行的代码没有出现在任务管理器中,但文章继续说:
远程进程没有用户界面,但列在任务管理器
中
无论哪种方式,这都符合我的需求,因为我正在运行一个shell命令 - 但值得注意的是,以这种方式执行cmd命令需要将它们格式化为:
cmd /c <command-goes-here>
在我的情况下,命令需要从特定位置运行,所以我需要传递:
cmd /c cd <path-to-executable> && <command-goes-here>