2016-10-26 7 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

После прочтения вокруг этого и запустить некоторые тесты, кажется, что похож на тех, которые начались с CScript, these processes cannot be made interactive:

Вы можете использовать Win32_Process.Create для выполнения сценария или приложения на удаленном компьютере. Однако из соображений безопасности процесс не может быть интерактивным. Когда Win32_Process.Create вызывается на локальном компьютере, процесс может быть интерактивным.

Я еще немного запутался, потому что код, который я побежал выше, не появляется в диспетчере задач, но статья продолжает говорить:

Удаленный процесс не имеет пользовательского интерфейса, но перечислен в Task Manager

так или иначе, это устраивает мои потребности, как я бегу команды оболочки - однако стоит отметить, что выполнение команд CMD таким образом, требует, чтобы они были отформатированы как:

cmd /c <command-goes-here> 

В моем случае, команда должна быть запущена с определенного места, так что мне нужно пройти:

cmd /c cd <path-to-executable> && <command-goes-here>