我想从.net调用netsh
命令,我正在使用Process
类来启动调用netsh
命令的进程,并且它正常工作,现在我想要获取.NET中netsh
命令返回的输出,例如我在Process
中调用以下命令:
netsh wlan show hostednetwork
这将返回活动的managednetwork列表。
如何阅读.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名称等(单独)?
答案 0 :(得分:4)
在开始此过程之前,您需要将StartInfo.UseShellExecute
设置为false并将RedirectStandardOutput
设置为true,然后从Process.StandardOutput
读取。
所有MSDN上都记录了这些内容:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
答案 1 :(得分:4)
使用Process
类的StandardOutput
属性
上面链接的MSDN页面附带了一个如何使用StandardOutput
的简单示例。
答案 2 :(得分:4)
以下是代码:
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
}
};
}
}
我认为您应该使用Managed Wifi API框架而不是解析命令行实用程序的结果。这是更可靠的方式。看看来源,它们包含WifiExample。
答案 3 :(得分:1)
它应该是这样的:
//@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"];
}
}
}
不幸的是,我无法测试它来修复任何小错误。
另外,如果您要经常引用它们,我会在解析后将它们放入字典中,以减少查找时间。