C#with WMIC命令

时间:2017-04-19 04:43:32

标签: c# wmic

我试图在C#上执行wmic命令并获取输出,但该函数只返回第一行和未运行的命令。

代码:

private static String wimc(String cmd)
    {
        var psi = new ProcessStartInfo("wmic");
        psi.Arguments = @"shadowcopy call create Volume='C:\'";
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        var p = Process.Start(psi);
        p.WaitForExit();
        String output = p.StandardOutput.ReadToEnd();


        return output;
    }

C#上的输出:

  

执行(Win32_ShadowCopy) - > create()

仅显示第一行和命令不起作用

Cmd输出(预期)

Executing (Win32_ShadowCopy)->create() Method execution successful. Out Parameters: instance of __PARAMETERS {
            ReturnValue = 0;
            ShadowID = "{B2FDCFDE-7C48-4F96-9648-9A15DB89506C}"; 
};
cmd上的

shadowcopy是使用sucess

创建的

2 个答案:

答案 0 :(得分:1)

要将wmic重定向到控制台输出,您需要在参数中添加/ OUTPUT:STDOUT。

当然,您需要以管理员身份运行C#应用程序。

var psi = new ProcessStartInfo("wmic");
psi.Arguments = @"/OUTPUT:STDOUT shadowcopy call create Volume='C:\'";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
var p = Process.Start(psi);
p.WaitForExit();
String output = p.StandardOutput.ReadToEnd();
String errOutput = p.StandardError.ReadToEnd();

答案 1 :(得分:0)

这对我有用。

System.Diagnostics.ProcessStartInfo usbDevicesInfo = new System.Diagnostics.ProcessStartInfo("wmic", "path CIM_USBDevice get Caption");
usbDevicesInfo.RedirectStandardOutput = true;
usbDevicesInfo.UseShellExecute = false;
usbDevicesInfo.CreateNoWindow = true;
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = usbDevicesInfo;
process.Start();
process.WaitForExit();
Console.WriteLine("ExitCode: " + process.ExitCode.ToString() + "\n");
result = process.StandardOutput.ReadToEnd();
Console.WriteLine(result);