如何为ProcessStartInfo传递多参数并实现依次执行?
解决ProcessStartInfo多命令仅执行最后一个的问题
你当前的代码里连续两次给psexec.Arguments赋值,第二次的内容直接覆盖了第一次,所以最终只会执行最后一次设置的命令。要让多个命令依次运行,可参考以下几种方案:
方案一:在同一个psexec调用中串联多个命令
通过cmd的命令串联符&(无论前序命令成功与否都执行后续命令)或&&(仅前序命令执行成功才执行后续命令),把多个WMIC命令合并到同一个Arguments中,注意用双引号包裹cmd的/c参数后的内容,避免命令拆分错误。
示例代码:
ProcessStartInfo psexec = new ProcessStartInfo(@"D:\psexec.exe"); // 这里示例串联两个WMIC命令,可根据实际需求修改 psexec.Arguments = $@"\\{ip} -s cmd /c ""c:\Windows\System32\wbem\WMIC.exe process get name & c:\Windows\System32\wbem\WMIC.exe service get name"""; Process.Start(psexec);
方案二:依次独立启动多个进程并等待执行完成
如果需要严格按顺序执行命令,且前一个命令完成后再启动下一个,可以分别创建Process实例,每次启动后调用WaitForExit()等待进程执行完毕,再启动下一个命令。
示例代码:
// 执行第一个命令 ProcessStartInfo psexec1 = new ProcessStartInfo(@"D:\psexec.exe"); psexec1.Arguments = $@"\\{ip} -s cmd /c c:\Windows\System32\wbem\WMIC.exe [第一个WMIC具体参数]"; Process proc1 = Process.Start(psexec1); proc1.WaitForExit(); // 等待第一个命令执行完成 // 执行第二个命令 ProcessStartInfo psexec2 = new ProcessStartInfo(@"D:\psexec.exe"); psexec2.Arguments = $@"\\{ip} -s cmd /c c:\Windows\System32\wbem\WMIC.exe [第二个WMIC具体参数]"; Process proc2 = Process.Start(psexec2); proc2.WaitForExit();
方案三:通过批处理文件执行多命令
如果需要执行的命令较多,可以把所有WMIC命令写入一个批处理文件,再通过psexec调用这个批处理文件,便于管理和维护。
- 先创建批处理文件(比如
remote_wmic_commands.bat),内容如下:
c:\Windows\System32\wbem\WMIC.exe [第一个WMIC具体参数] c:\Windows\System32\wbem\WMIC.exe [第二个WMIC具体参数]
- 然后在C#中调用:
ProcessStartInfo psexec = new ProcessStartInfo(@"D:\psexec.exe"); psexec.Arguments = $@"\\{ip} -s cmd /c ""C:\指定路径\remote_wmic_commands.bat"""; Process.Start(psexec);
内容的提问来源于stack exchange,提问作者zaknafein
相关产品推荐
相关产品推荐

