it-swarm.com.de

Wie führt man einen Befehl auf einem Remote-Computer aus?

Ich habe einen freigegebenen Ordner auf einem Server und muss einen Befehl für einige Dateien remote ausführen. Wie mache ich das? 

Welche Dienste müssen auf dem Server ausgeführt werden, damit dies funktioniert?

Einige Details: Nur C # kann verwendet werden. Auf dem Server kann nichts installiert werden.

20
user53179

Eine andere Lösung ist die Verwendung von WMI.NET oder Windows Management Instrumentation

Mit dem .NET Framework-Namespace System.Management können Sie Verwaltungsaufgaben mithilfe von Windows Management Instrumentation (WMI) automatisieren.

Codebeispiel

var processToRun = new[] { "notepad.exe" };
var connection = new ConnectionOptions();
connection.Username = "username";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);

Wenn Sie Probleme mit der Authentifizierung haben, überprüfen Sie die DCOM-Konfiguration.

  1. Führen Sie auf dem Zielcomputer dcomcnfg über die Eingabeaufforderung aus. 
  2. Erweitern Sie Component Services\Computers\My Computer\DCOM Config
  3. Suchen Sie nach der Windows-Verwaltungsanweisung, die mit GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820 identifiziert wird (dies wird in der Detailansicht angezeigt).
  4. Bearbeiten Sie die Eigenschaften und fügen Sie den Benutzernamen, mit dem Sie sich anmelden möchten, auf der Registerkarte "Berechtigungen" hinzu. 
  5. Möglicherweise müssen Sie den Dienst oder die gesamte Maschine neu starten.

HINWEIS: Alle für den Remote-Prozess verwendeten Pfade müssen lokal auf dem Zielcomputer sein.

31
Dennis

Sie können SysInternals PsExec verwenden.

6
Dirk Vollmar
try
{
    string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\";
    string strFilePath = AppPath + "ABCED120D_XXX.bat";
    System.Diagnostics.Process proc = new System.Diagnostics.Process();

    proc.StartInfo.FileName = strFilePath;
    string pwd = "s44erver";

    proc.StartInfo.Domain = "abcd";
    proc.StartInfo.UserName = "sysfaomyulm";

    System.Security.SecureString secret = new System.Security.SecureString();
    foreach (char c in pwd)

        secret.AppendChar(c);

    proc.StartInfo.Password = secret;
    proc.StartInfo.UseShellExecute = false;

    proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin ";

    proc.Start();
    while (!proc.HasExited)
    {
        proc.Refresh();
        // Thread.Sleep(1000);
    }

    proc.Close();
}
catch (Exception ex)
{
    throw ex;
}
0
ZokiManas

IMO, in deinem Fall kannst du folgendes versuchen:

  1. Ordnen Sie den freigegebenen Ordner einem Laufwerk oder einem Ordner auf Ihrem Computer zu. ( hier ist wie )
  2. Greifen Sie auf das zugeordnete Laufwerk/Ordner zu, wie Sie es normalerweise bei lokalen Dateien tun würden.

Es muss nichts installiert werden. Es müssen keine Dienste ausgeführt werden, außer denjenigen, die die Freigabe von Ordnern ermöglichen.

Wenn Sie auf den freigegebenen Ordner zugreifen und ihn auf Ihrem Computer zuordnen können, sollten die meisten Funktionen wie lokale Dateien funktionieren, einschließlich Befehlsanweisungen und aller Explorer-Verbesserungs-Tools.

Dies unterscheidet sich von der Verwendung von PsExec (oder RDP-Eingaben) dahingehend, dass Sie keine Administratorrechte und/oder Remotedesktop-/Terminaldienste-Verbindungsrechte auf dem Remote-Server haben müssen. Sie müssen lediglich auf diese freigegebenen Ordner zugreifen können.

Stellen Sie außerdem sicher, dass Sie über alle erforderlichen Sicherheitsberechtigungen verfügen, um die Befehle/Tools auszuführen, die Sie auch für diese freigegebenen Ordner ausführen möchten.


Wenn Sie jedoch wünschen, dass die Verarbeitung on auf dem Zielcomputer ausgeführt wird, können Sie PsExec versuchen, da @divo und @recursive darauf hinweisen:

PsExec \\yourServerName -u yourUserName cmd.exe

Welcher Wille bringt, gibt Ihnen einen Befehl Prompt at der entfernten Maschine. Und von dort aus können Sie ausführen, was Sie wollen.

Ich bin nicht sicher, aber ich denke, Sie benötigen entweder den Server (lanmanserver) oder den Terminal Services (TermService) -Dienst (der bereits laufen sollte).

0
chakrit