2016-10-26 97 views
0

我想在使用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

閱讀解決此並運行一些測試後,似乎類似於那些從CScriptthese 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>