WMIC管理类RemoteCommand -确定何时完成?STDOUT

本文关键字:何时完 STDOUT 管理 RemoteCommand WMIC | 更新日期: 2023-09-27 18:09:10

我正在通过WMIC执行远程CMD行命令,需要几秒钟才能运行。在继续之前,我目前正在做Thread.Sleep(4000)…一定有更好的办法!是否有一个变量或方法可以用来确定我发出的命令是否完成/状态字节?

谢谢!

我使用以下代码发出命令:

ManagementClass processTask = new ManagementClass(@"''" + this.wmiConnection.machineName + @"'root'CIMV2", "Win32_Process", null);
        ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
        methodParams["CommandLine"] = command;
        methodParams["CurrentDirectory"] = @"C:'";

只需要弄清楚如何确定命令何时完成:)。谢谢!

WMIC管理类RemoteCommand -确定何时完成?STDOUT

在我的理解中,当你这样写:

ManagementClass processTask = new ManagementClass(@"''192.168.183.100'root'CIMV2", "Win32_Process", null);
ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
methodParams["CommandLine"] = "cmd.exe";
methodParams["CurrentDirectory"] = @"C:'";
//Execute the method
ManagementBaseObject outParams = processTask.InvokeMethod("Create", methodParams, null);

您正在以同步方式启动远程进程,因此

outParams["returnvalue"]
outParams["processid"]

将给出返回代码和processId,正如如何执行方法中所解释的,如果你想异步运行它,你可以阅读:如何:异步调用方法

这里有一个类似的问题:等待服务。调用方法来完成- WMI, c#

下面的文档如何:执行方法和如何:异步调用方法描述了半同步和异步执行。你所做的是半同步执行。

据我所知,这提供了关于WMI在哪里成功执行命令的反馈。如果它是一个长时间运行的命令,如运行安装程序、停止服务或执行批处理文件,WMI将在安装程序启动、服务被告知开始停止或启动批处理文件进程时返回。

要真正等待新进程退出,据我所知,您需要轮询以查看进程是否正在运行,或者查询服务是否已停止。在您的示例中,根据命令轮询进程id。

我自己也在调查这件事