尝试通过 cmd shell 在远程计算机上启动 exe 或 bat 文件
Trying to start an exe or bat file on a remote machine, via a cmd shell
运行 以下从命令行启动远程计算机上的进程
wmic /node:remotemachine /user:localadmin process call create "cmd.exe /c C:\temp\myfolder\test.bat"
基本上就是
echo Some Text > output.txt
我通过双击批处理文件进行了测试,它创建了 output.txt 文件。
批处理文件只是回显到一个文件。我这样做是为了看看它是否真的 运行s.
cmd进程启动。我可以在进程中看到它,但批处理文件永远不会创建文本文件。
我开始尝试从我的 C# 应用程序 运行 一个 EXE,但它会为可执行文件创建进程,但可执行文件执行的操作从未发生。
所以我开始测试其他方法来做同样的事情,但我遇到了同样的问题。它创建了进程,但实际上并没有 运行 bat 或 exe。
如有任何帮助,我们将不胜感激。
我需要更具体一些
我在我的 C# 应用程序中使用以下代码:
public static void ConnectToRemoteClient(string client_machine, string target_exe )
{
var connection = new ConnectionOptions();
object[] theProcessToRun = { target_exe };
var wmiScope = new ManagementScope($@"\{client_machine}\root\cimv2", connection);
wmiScope.Connect();
using (var managementClass = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()))
{
managementClass.InvokeMethod("Create", theProcessToRun );
}
}
调用如下:
使用以下语法调用它:
string exe = string.Format(@"cmd.exe /c C:\temp\Myfolder\test.bat");
ConnectToRemoteClient("ClientMachine", exe);
它将启动进程,我看到 cmd.exe 运行ning,但 test.bat 操作从未发生。
请使用下面提到的powershell命令
Invoke-Command -ComputerName <remoteMachine> -Credential $cred -ScriptBlock {<location of batch file>}
告诉 WMIC 运行 一个命令非常简单。一旦我们试图将一个命令嵌套在另一个命令中,问题就出现了。 :-)
由于这种情况下有一个外部命令 (cmd.exe) 和一个内部命令 (C:\temp\Myfolder\test.bat),诀窍是以 WMIC 可以使用的方式将它们分开。有 3 种技术可以使用,但对特殊字符问题最少的一种是单到双换行方法。实际上,您在外部命令周围使用单引号,在内部命令周围使用双引号。例如:
wmic /node:NameOfRemoteSystem process call create 'cmd.exe /c "whoami /all >c:\temp\z.txt"'
以这种方式换行将保留重定向器 (>),并且不需要您在内部命令中加倍反斜杠。
示例输出:
dir \NameOfRemoteSystem\c$\temp\z.txt
File Not Found
wmic /node:NameOfRemoteSystem process call create 'cmd.exe /c "whoami /all >c:\temp\z.txt"'
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ProcessId = 20460;
ReturnValue = 0;
};
dir \NameOfRemoteSystem\c$\temp\z.txt
03/27/2019 04:40 PM 17,977 z.txt
运行 以下从命令行启动远程计算机上的进程
wmic /node:remotemachine /user:localadmin process call create "cmd.exe /c C:\temp\myfolder\test.bat"
基本上就是
echo Some Text > output.txt
我通过双击批处理文件进行了测试,它创建了 output.txt 文件。
批处理文件只是回显到一个文件。我这样做是为了看看它是否真的 运行s.
cmd进程启动。我可以在进程中看到它,但批处理文件永远不会创建文本文件。
我开始尝试从我的 C# 应用程序 运行 一个 EXE,但它会为可执行文件创建进程,但可执行文件执行的操作从未发生。
所以我开始测试其他方法来做同样的事情,但我遇到了同样的问题。它创建了进程,但实际上并没有 运行 bat 或 exe。
如有任何帮助,我们将不胜感激。
我需要更具体一些
我在我的 C# 应用程序中使用以下代码:
public static void ConnectToRemoteClient(string client_machine, string target_exe )
{
var connection = new ConnectionOptions();
object[] theProcessToRun = { target_exe };
var wmiScope = new ManagementScope($@"\{client_machine}\root\cimv2", connection);
wmiScope.Connect();
using (var managementClass = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()))
{
managementClass.InvokeMethod("Create", theProcessToRun );
}
}
调用如下:
使用以下语法调用它:
string exe = string.Format(@"cmd.exe /c C:\temp\Myfolder\test.bat");
ConnectToRemoteClient("ClientMachine", exe);
它将启动进程,我看到 cmd.exe 运行ning,但 test.bat 操作从未发生。
请使用下面提到的powershell命令
Invoke-Command -ComputerName <remoteMachine> -Credential $cred -ScriptBlock {<location of batch file>}
告诉 WMIC 运行 一个命令非常简单。一旦我们试图将一个命令嵌套在另一个命令中,问题就出现了。 :-)
由于这种情况下有一个外部命令 (cmd.exe) 和一个内部命令 (C:\temp\Myfolder\test.bat),诀窍是以 WMIC 可以使用的方式将它们分开。有 3 种技术可以使用,但对特殊字符问题最少的一种是单到双换行方法。实际上,您在外部命令周围使用单引号,在内部命令周围使用双引号。例如:
wmic /node:NameOfRemoteSystem process call create 'cmd.exe /c "whoami /all >c:\temp\z.txt"'
以这种方式换行将保留重定向器 (>),并且不需要您在内部命令中加倍反斜杠。
示例输出:
dir \NameOfRemoteSystem\c$\temp\z.txt
File Not Found
wmic /node:NameOfRemoteSystem process call create 'cmd.exe /c "whoami /all >c:\temp\z.txt"'
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ProcessId = 20460;
ReturnValue = 0;
};
dir \NameOfRemoteSystem\c$\temp\z.txt
03/27/2019 04:40 PM 17,977 z.txt