将信息从Cmd提示窗口复制到控制台应用程序中

时间:2013-07-31 17:03:31

标签: c# cmd nslookup

编程新手,但我想知道我想做什么甚至是可能的!如果是这样的话?

我开发了一个获取计算机IP地址的控制台应用程序。然后程序打开cmd提示符并运行nslookup(使用所述IP地址)以获取有关计算机的一些信息。

当程序结束时,我打开了两个控制台窗口; cmd promt控制台和程序控制台。 cmd提示符有我需要的信息。我无法弄清楚如何从cmd控制台复制/获取信息并将其放入字符串/数组中,以便我可以使用这些信息。

我搜索了Google,但我不断获得的是从cmd提示窗口手动复制的方法!不是如何从一个程序中打开的cmd提示窗口返回信息!

另外,请不要建议执行反向DNS查找或使用environment.machinename而不是使用cmd提示符。我尝试了很多方法,这是我能够访问所需信息的唯一方法。

using System;
using System.Net;
using System.Net.Sockets;


namespace ProcessService
{
    static class Program
    {

        static void Main()
        {

            //The IP or Host Entry to lookup
            IPHostEntry host;
            //The IP Address String
            string localIP = "";
            //DNS lookup
            host = Dns.GetHostEntry(Dns.GetHostName());
            //Computer could have several IP addresses,iterate the collection of them to find the proper one
            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    localIP = ip.ToString();
                }
            }

            //Converts an IP address string to an IPAddress instance.
            IPAddress address = IPAddress.Parse(localIP);


            string strCmdText;
            strCmdText = "/k nslookup " + localIP;
            //open cmd prompt and run the command nslookup for a given IP
            System.Diagnostics.Process.Start("C:/Windows/System32/cmd.exe", strCmdText);


            //output result
            Console.WriteLine(strCmdText);
            //Wait for user to press a button to close window
            Console.WriteLine("Press any key...");
            Console.ReadLine();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你正在开始一个外部流程,这很好。您现在需要做的是重定向标准输出。您只需将其反馈到您的程序中,而不是从cmd提示窗口复制信息。你将不得不做一些解析,但这是微软的样本:

// Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = "Write500Lines.exe";
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();

来源:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx