3
我创建了一个.bat文件,该文件显示服务器终端服务会话标识和用户名。 林显示信息在DataGridc#.net错误循环使用枚举器
这里是.bat文件的输出:
C:\Documents and Settings\adcock>qwinsta /server:ilsap01 SESSIONNAME USERNAME ID STATE TYPE DEVICE console 0 Conn wdcon rdp-tcp 65536 Listen rdpwd Jrodriguez 27 Disc rdpwd pbahena 8 Disc rdpwd tfurr 3 Disc rdpwd rdp-tcp#2187 kchild 14 Active rdpwd Trhodes 10 Disc rdpwd ajordan 16 Disc rdpwd Trhodes 11 Disc rdpwd rdp-tcp#2191 rluna 15 Active rdpwd rdp-tcp#2192 lcathey 17 Active rdpwd
我要显示的唯一信息是会话ID和用户名与代码有些作品下面。
protected void Button1_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:\listfiles.bat");
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process listFiles;
listFiles = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader rawUserData = listFiles.StandardOutput;
listFiles.WaitForExit(30000);
try
{
DataTable table2 = new DataTable();
table2.Columns.Add(new DataColumn("UserName", typeof(string)));
table2.Columns.Add(new DataColumn("SessionId", typeof(string)));
String myString = rawUserData.ReadToEnd();
string exp = @"([\w_]+)"; ;
MatchCollection matches = Regex.Matches(myString, exp,RegexOptions.IgnoreCase);
IEnumerator en = matches.GetEnumerator();
while (en.MoveNext())
{
Match match = (Match)en.Current;
if (en.Current.ToString() == "rdpwd")
{
en.MoveNext();
Match match_Item = (Match)en.Current;
string item = match_Item.Value;
en.MoveNext();
Match match_Item2 = (Match)en.Current;
string item2 = match_Item2.Value;
DataRow row = table2.NewRow();
row[0] = item.Split()[0];
row[1] = item2.Split()[0];
//row[1] = item.Split(',')[1];
table2.Rows.Add(row);
//en.MoveNext();
//break;
}
}
this.displayUsers.DataSource = table2;
this.displayUsers.DataBind();
}
catch (Exception ex)
{
Response.Write(ex);
}
我的错误是: 枚举有或者没有启动或已完成。
我设置了一个断点,并且它接受while循环完成但重新开始,并且在它添加一对重复记录之后,它会引发错误。任何想法是什么造成这一点。我在想我的RegEx
每次检查if(en.MoveNext()) – garik 2010-08-02 13:27:55
为什么在调试过程中不打印每个匹配?你确定你可以在不检查是否有更多匹配的情况下移动下一个文本吗? – jgauffin 2010-08-02 13:31:13
我很想知道.bat文件代码的外观。也许另一种方法是使用WMI来获取终端服务SessionID,而不是使用.bat文件和System.Diagnostics.ProcessStartInfo。请参阅:http://msdn.microsoft.com/en-us/library/aa383637(VS.85).aspx – Riaan 2010-08-02 13:54:11