Próbuję dodać wielu użytkowników do grupy Active Directory przez polecenia CMD i wyświetl wynik. Chcę, aby użytkownicy wymienili w jednym Listbox i obok niego w innej listy wyników, niezależnie od tego, czy działało, czy nie.

for (int i = 0; i < amount; i++)
{
 System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
 string strCommand = "cmd.exe";
 string strCommandParameters = Parameters;
 pProcess.StartInfo.FileName = strCommand;
 pProcess.StartInfo.Arguments = strCommandParameters;
 pProcess.StartInfo.UseShellExecute = false;
 pProcess.StartInfo.CreateNoWindow = true;
 pProcess.StartInfo.RedirectStandardOutput = true;
 pProcess.Start();

 string strOutput = pProcess.StandardOutput.ReadToEnd();

 LBresponse.Items.Add(strOutput);
 Console.WriteLine(strOutput);

 pProcess.WaitForExit();
}

Kiedy drukujemy wyniki za pomocą Console.WriteLine(strOutput);, dostaję te 3 linie.

Wystąpił błąd systemu 5.

Brak dostępu

Żądanie jest przetwarzane na ****

Ale kiedy próbuję dodać ciąg do Listbox z LBresponse.Items.Add(strOutput); Dodaje się tylko ostatnia linia. Pierwsze dwa są nieco ważniejsze niż ostatni.

Myślę, że problem jest pętlą, ale nie mam wskazówki, jak go naprawić.

0
SideSky 4 sierpień 2020, 10:57

1 odpowiedź

Najlepsza odpowiedź

Problem był taki

pProcess.StartInfo.RedirectStandardOutput = true;
string strOutput = pProcess.StandardOutput.ReadToEnd();

Musi zostać zastąpiony przez

pProcess.StartInfo.RedirectStandardError = true;
string strOutput = pProcess.StandardError.ReadToEnd();

Uzyskać pierwsze dwie linie.

ReadLine wydrukuje pierwszą linię.

0
Rand Random 4 sierpień 2020, 08:48