.NET: чтение вывода командной строки - PullRequest
2 голосов
/ 14 февраля 2012

Я хочу вызвать команду netsh из .net, я использую класс Process для запуска процесса, который вызывает команду netsh, и она работает нормально, теперь я хочу получить результат, возвращаемыйкоманда netsh в .NET, например, я вызываю приведенную ниже команду в Process:

netsh wlan show hostednetwork

, это возвращает мне список активной размещенной сети.

Как я могучитать список в .NET?
Может ли кто-нибудь помочь мне или направить меня по правильному пути (я не хочу использовать какие-либо сторонние инструменты)?


ОБНОВЛЕНИЯ Ниже приведены мои выходные данные с использованием команды netsh wlan show hostednetwork

Настройки размещенной сети

Mode                   : Allowed
SSID name              : "AqaMaula(TUS)"
Max number of clients  : 100
Authentication         : WPA2-Personal
Cipher                 : CCMP

Состояние размещенной сети

Status                 : Started
BSSID                  : 06:65:9d:26:f4:b7
Radio type             : 802.11n
Channel                : 11
Number of clients      : 1
    d0:c1:b1:44:8b:f0        Authenticated

Может кто-нибудь сказать мне, как я могу получитьвсе отдельные данные и поместить их в базу данных, например, режим, имя SSID и т. д. (индивидуально)?

Ответы [ 4 ]

4 голосов
/ 14 февраля 2012

Вот код:

using System;
using System.Diagnostics;

public static class Program
{
    public static void Main()
    {
        var output = RunProcess();
        Console.WriteLine(output);
    }

    /// <summary>
    /// Runs the process: starts it and waits upon its completion.
    /// </summary>
    /// <returns>
    /// Standart output content as a string.
    /// </returns>
    private static string RunProcess()
    {
        using (var process = CreateProcess())
        {
            process.Start();

            // To avoid deadlocks, always read the output stream first and then wait.
            // For details, see: [Process.StandardOutput Property (System.Diagnostics)](https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v=vs.110).aspx).
            var output = process.StandardOutput.ReadToEnd();
            process.WaitForExit();

            return output;
        }
    }

    private static Process CreateProcess()
    {
        return new Process
            {
                StartInfo =
                    {
                        FileName = "netsh",
                        Arguments = "wlan show hostednetwork",
                        UseShellExecute = false,
                        RedirectStandardOutput = true
                    }
            };
    }
}

Обновление

Я думаю, вам следует использовать Управляемый Wifi API фреймворк вместо анализа результатов утилиты командной строки.Это более надежный способ.Взгляните на источники, они содержат WifiExample .

4 голосов
/ 14 февраля 2012

Вам нужно установить StartInfo.UseShellExecute в false и RedirectStandardOutput в true перед началом процесса, а затем прочитать из Process.StandardOutput.

Все документировано в MSDN здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

4 голосов
/ 14 февраля 2012

Используйте свойство StandardOutput класса Process.
На приведенной выше странице MSDN приведен простой пример использования StandardOutput.

1 голос
/ 14 февраля 2012

Должно быть что-то вроде этого:

//@param output The output captured from the netsh command in String format
//@param key The key you are trying to find (in your example "Mode")
public String getValue(String output, String key) {
    MatchCollection matches;
    Regex rx = new Regex(@"(?<key>[A-Za-z0-0 ]+)\t\:\s(?<value>[.]+)");
    matches = rx.Matches(output);

    foreach (Match match in matches) {
        GroupCollection groups = match.Groups;

        if (groups["key"] == key) {
            return groups["value"];
        }
    }
}

К сожалению, я не могу проверить его на наличие мелких ошибок.

Кроме того, если вы будете часто на них ссылатьсяЯ бы поместил их в словарь после разбора, чтобы уменьшить время поиска.

...