C # .net Заполните сетку данных из результата .bat файла - PullRequest
3 голосов
/ 30 июля 2010

Я создал файл .bat, в котором отображаются все пользователи, вошедшие в Windows Terminal Services.Я могу выполнить файл .bat в своем коде c # и отобразить результаты в виде простого текста в метке или текстовом поле.То, что я хотел бы сделать, это привязка данных имени пользователя и идентификатора сеанса в сетке данных.

  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 myOutput = listFiles.StandardOutput;
    listFiles.WaitForExit(2000);
     if (listFiles.HasExited)
       {
        string output = myOutput.ReadToEnd();
        // this.TextBox1.Text = output;
        }

  }

Ответы [ 4 ]

2 голосов
/ 30 июля 2010

Вы можете попробовать что-то вроде этого:

        string[] input = myOutput.ReadToEnd().Split('\n');

        DataTable table = new DataTable();

        table.Columns.Add(new DataColumn("UserName", typeof(string)));
        table.Columns.Add(new DataColumn("SessionId", typeof(string)));

        foreach (string item in input)
        {
            DataRow row = table.NewRow();
            row[0] = item.Split(',')[0];
            row[1] = item.Split(',')[1];
            table.Rows.Add(row);
        }

        myGridView.DataSource = table;

        // for WebForms:
        myGridView.DataBind();

Конечно, вы захотите:

  • сделать некоторую проверку ошибок (я сделал много предположений в примере)
  • убедитесь, что имя пользователя находится перед идентификатором сеанса
  • , также убедитесь, что у вас есть DataGrid (myGridView) для привязки к
  • Убедитесь, что ваши выходные данные действительно переводятся на новую строку и запятуюdelimited
  • Если нет, то обновите символы в коде
  • Также ... я сделал это менее эффективным, чтобы показать процесс
1 голос
/ 30 июля 2010

Вместо того, чтобы зависеть от запуска файла .bat, почему бы вам не сделать это напрямую, используя что-то вроде API служб удаленных рабочих столов?

http://msdn.microsoft.com/en-us/library/aa383459%28VS.85%29.aspx

Или, может быть, с помощью Wmi:

http://gallery.technet.microsoft.com/ScriptCenter/en-us/f053de86-f053-474b-9b21-f2e6b161948f

0 голосов
/ 30 июля 2010

Вы можете создать структуру xml и затем привязать сетку данных к этой структуре.

0 голосов
/ 30 июля 2010

Вы можете создать DataTable в памяти, добавить столбцы для имени пользователя и sessionid.В вашем цикле split () - выходная строка, основанная на разделяющем символе (запятая? Точка с запятой?) И добавление строк в таблицу на основе этого.

Затем установите для этого источника данных таблицы и привязку данных.

Кроме того, вы можете использовать другие типы коллекций.

...