2013-04-10 7 views
5

Mam remote server name (Windows), username i password.Uruchom komendę na zdalnym serwerze Windows i uzyskaj wynik konsoli w języku C# .NET

Korzystanie z C# .NET, chcę run a command na zdalnym serwerze i odzyskać console output

Czy istnieje sposób, aby zrobić to w C#?

Udało mi się uruchomić polecenie przy użyciu WMI z następującego kodu (częściowe), ale bez powodzenia uzyskiwanie wyjścia konsoli. Mogłem tylko odzyskać Process ID.

ObjectGetOptions objectGetOptions = new ObjectGetOptions(); 
ManagementPath managementPath = new ManagementPath("Win32_Process"); 
ManagementClass processClass = new ManagementClass(scope, managementPath,objectGetOptions); 

ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); 

inParams["CommandLine"] = "cmd.exe /c "+ mycommand; 
ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null); 

Jakieś pomysły?

+0

Myślę o tym, jak powoływać się na polecenia przez sesję Telnet ... Nie jestem pewien, czy wielu ekspertów ds. Bezpieczeństwa zgodziłoby się, ale stosunkowo łatwo byłoby uchwycić wyniki. – dotcomslashnet

+0

Czy możesz przekierować wyjście konsoli do pliku tekstowego i jakoś odzyskać plik? –

+0

@dotcomslashnet Sprawdzę te linie. – BlackCursor

Odpowiedz

4

Ta funkcja jest tym, co wymyśliłem po przeprowadzeniu badań. Mam nadzieję, że pomaga komuś innemu.

public string executeCommand(string serverName, string username, string password, string domain=null, string command) 
{ 
    try 
    { 
     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.RedirectStandardOutput = true; 
     startInfo.UseShellExecute = false; 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = "cmd.exe"; 
     if (null != username) 
     { 
      if (null != domain) 
      { 
       startInfo.Arguments = "/C \"psexec.exe \\\\" + serverName + " -u " + domain+"\\"+username + " -p " + password + " " + command + "\""; 
      } 
      else 
      { 
       startInfo.Arguments = "/C \"psexec.exe \\\\" + serverName + " -u " + username + " -p " + password + " " + command + "\""; 
      } 
     } 
     else 
     { 
      startInfo.Arguments = "/C \"utils\\psexec.exe "+serverName+" "+ command + "\""; 
     } 
     process.StartInfo = startInfo; 
     process.Start(); 
     process.WaitForExit(); 

     if (process.ExitCode == 0 && null != process && process.HasExited) 
     { 
      return process.StandardOutput.ReadToEnd(); 
     } 
     else 
     { 
      return "Error running the command : "+command; 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 
1

Możesz spróbować wykonać polecenie za pomocą programu PsTools. Jedną z wielu oferowanych funkcji jest PsExec. Umożliwia uruchamianie polecenia na zdalnym serwerze. Powinien również zwrócić wyniki do konsoli (na lokalnym komputerze, na którym został uruchomiony).

+0

Dziękuję, wskazując mnie we właściwym kierunku. Z powodzeniem użyłem 'PsExec', aby połączyć się ze zdalnym serwerem, uruchomić polecenie i uzyskać wyjście konsoli jako ciąg. Dodaję kod jako osobną odpowiedź, ponieważ może pomóc komuś innemu. Dzięki jeszcze raz! – BlackCursor

Powiązane problemy