Bestimmte Prozesse remote auf anderen Rechnern beenden (killen)

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Sagador.

    Bestimmte Prozesse remote auf anderen Rechnern beenden (killen)

    Hallo,

    Ich habe folgendes Problem:

    Auf ca. 35-40 Rechnern muss ich per Knopfdruck div. Prozesse wegschiessen können. Wie ich das auf meinem Lokalen Rechner mache weis ich, nur egal welche Suchkombi ich in Google und Co eingebe ich bekomme keine info darüber.

    mit einem

    Quellcode

    1. Process.GetProcessById(4711, RECHNERNAME)

    könnte ich zwar den Prozess herausfinden, aber hierfür müsste ich ja ersteinmal die ID wissen und diese ist ja bei jedem Start der "abzuschießenden" Prozesse anders.
    Hat jemand eine Idee von euch wie ich es umsetzen könnte? oder evtl einen Link wo ich es nachlesen könnte? Ich habe auch schon einmal auf der MS Seite gesucht aber irgendwie finde ich da auch nicht wirklich das was ich suche.
    ThX für eine Nachricht
    Hi Rinecamo,

    thx für den snippet aber wie ich schon in meinem Post schrieb, ist mir schon klar wie ich einen Prozess lokal beende. Nur wie stelle ich es an diesen Prozess auf einem Remoterechner zu beenden.

    SrY wenn ich mich evtl. falsch ausgedrückt habe, hier nocheinmal etwas verständlicher (hoffe ich):

    Ich sitze an Rechner A und muss von Rechner A aus per Knopfdruck auf ca. 40 Rechner im Netzwerk einen Prozess "abschiessen".

    gruß OsiriZ
    hi thx für den link,

    aber irgendwie verstehe ich da nur "Bahnhof" ;(

    und irgendwie funzt das ganze nicht so wirklich mit meinem VB2008 express :S

    bei diesem Code:

    VB.NET-Quellcode

    1. oMs = new System.Management.ManagementScope(@\\<remoteMachineName>\XXX\YYY,conO);

    bekomme ich nur Fehler und wenn ich ihn so umbaue das mein VB2008 Express nicht mehr motzt

    VB.NET-Quellcode

    1. Dim conO = New System.Management.ConnectionOptions
    2. conO.Username = My.Settings.tb_dom & "\" & My.Settings.tb_account
    3. conO.Password = My.Settings.tb_passwort
    4. Dim oMs = New System.Management.ManagementScope("\\DKDEW7014\root\cimv2", conO)


    dann bekomme ich beim debuggen nur Zeug angezeigt mit dem ich nicht wirklich weiterkomme, wäre cool wenn mir einer sagen könnte wo ich hier den Denkfehler habe ... Danke
    dann bekomme ich beim debuggen nur Zeug angezeigt mit dem ich nicht wirklich weiterkomme

    Und die, die helfen kommen, kommen ohne dieses Zeug nicht weiter...
    Und eine Glaskugel hat hier fast niemand mehr, weil die so schnell kaputt gehen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    dann bekomme ich beim debuggen nur Zeug angezeigt mit dem ich nicht wirklich weiterkomme

    Und die, die helfen kommen, kommen ohne dieses Zeug nicht weiter...
    Und eine Glaskugel hat hier fast niemand mehr, weil die so schnell kaputt gehen...

    Hi, was erwartest du das ich dir jetzt hier irgendwelche zeichen poste wie z.b. Uhrzeiten, wieviel tausend sekunden der rechner läuft etc. (ja das sieht man nämlich mit dem code den ich gepostet habe ;) ) die nichts mit dem problem als solches zu tun haben?

    es muss doch mit vb möglich sein einen prozess zu beenden und das ohne ein rätselraten ... aber es scheint echt die masche von Microsoft zu sein umständlich und compliziert ohne ende naja ist halt WINZIGWEICH.

    @memo WMI, sry bahnhof soweit bin ich noch nicht vorgedrungen in meiner Schulung :-(, naja wenn das die einzigste Möglichkeit ist einen simplen prozess zu beenden muss ich mir etwas anderes überlegen wie ich diese "automatisiert"
    abschießen kann. sry für die Störung

    Hi, was erwartest du das ich dir jetzt hier irgendwelche zeichen poste wie z.b. Uhrzeiten, wieviel tausend sekunden der rechner läuft etc. (ja das sieht man nämlich mit dem code den ich gepostet habe ;) ) die nichts mit dem problem als solches zu tun haben?

    Na die Fehler, die eben beim Debuggen kommen?!

    @memo WMI, sry bahnhof soweit bin ich noch nicht vorgedrungen in meiner Schulung :-(, naja wenn das die einzigste Möglichkeit ist einen simplen prozess zu beenden muss ich mir etwas anderes überlegen wie ich diese "automatisiert"
    abschießen kann. sry für die Störung

    Den Code, den du kopiert hast, das ist WMI und wie man einen Verweis zu Visual Studio hinzufügt sollte man können, ansonsten lässt sich das schnell herausfinden...
    Eine andere Möglichkeit wäre auf jedem der PCs ein Programm zu starten, welche über TCP oder UDP Daten empfangen und entsprechend auswerten...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ohh Mann ... wie oft denn noch der/die Fehler haben NULL, NULL mit meinem Problem zu tun! aber wie ihr wollt wenn ihr unbedingt die Meldungen sehen wollt bitte:

    ungeänderte Zeile übernommen aus Beispielcode, ergibt folgende FM Meldungen in VB-Studio Express 2008:

    VB.NET-Quellcode

    1. conO = new System.Management.ConnectionOptions();

    Fehler 1 Der Name "conO" wurde nicht deklariert. C:\xxx\FrAdmin\FrAdmin\frm_fradmin.vb 187 9 FrAdmin
    Fehler 2 Ungültiges Zeichen. C:\xxx\FrAdmin\FrAdmin\frm_fradmin.vb 187 57 FrAdmin
    ungeänderte Zeile übernommen aus Beispielcode, ergibt folgende FM Meldungen in VB-Studio Express 2008:

    VB.NET-Quellcode

    1. oMs = new System.Management.ManagementScope(@"\\<remoteMachineName>\XXX\YYY",conO);


    Fehler 1 Der Name "oMs" wurde nicht deklariert.
    Fehler 2 Ausdruck erwartet.
    Fehler 3 Der Name "conO" wurde nicht deklariert.
    Fehler 4 Ungültiges Zeichen.

    frage mich zwar wie das helfen soll aber bitte :huh:
    das @ kommt weg, das wird in C# verwendet, damit aus \ \\ wird, in VB .Net werden keine Escape Zeichen verwendet...
    Außerdem kommt das Semikolon am Ende jeder Zeile weg...
    Dann Deklarierst du keine der Variablen
    conO = New...
    ->
    Dim conO As New...

    hatte sehr wohl was mit dem Problem zu tun...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    OsiriZ schrieb:

    bekomme ich nur Fehler und wenn ich ihn so umbaue das mein VB2008 Express nicht mehr motzt

    VB.NET-Quellcode

    1. Dim conO = New System.Management.ConnectionOptions
    2. conO.Username = My.Settings.tb_dom & "\" & My.Settings.tb_account
    3. conO.Password = My.Settings.tb_passwort
    4. Dim oMs = New System.Management.ManagementScope("\\DKDEW7014\root\cimv2", conO)


    so zurück zum Anfang ... wie du sehen kannst hatte ich das schon gemacht ;)

    ich könnte jetzt noch den ganzen angepassten quellcode von der beispielseite einspielen aber ich bekomme damit keinen prozess beendet leider. Aber wenn in dem beispiel schon zeichen falsch sind, so das man es nicht nachvollziehen kann wie es funzen soll ...
    ist es evtl. der falsche Lösungsansatz.
    Für mich geht der Code noch wetier:
    System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("Select
    * from Win32_Process");

    //Execute the query

    System.Management.ManagementObjectSearcher oSearcher = new System.Management.ManagementObjectSearcher(oMs,oQuery);

    //Get the results

    System.Management.ManagementObjectCollection oReturnCollection = oSearcher.Get();

    //loop through found process and terminate

    foreach (System.Management.ManagementObject oReturn in oReturnCollection)
    {
    string[] argList = new string[] { string.Empty };

    //Name of process
    if (oReturn["Name"].ToString().ToLower() == "devenv.exe")
    {
    object[] obj = new object[] { 0 };
    oReturn.InvokeMethod("Terminate", obj);
    }
    }

    Und nein, das ist nicht der Falsche Lösungsansatz, das ist nur C#, aber das lässt sich 1:1 in VB.Net übersetzen...

    developerfusion.com/tools/convert/csharp-to-vb/
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wichtig sind keine Object Variablen sondern das sie einen definierten Datentyp haben

    Entweder

    VB.NET-Quellcode

    1. Dim conO As System.Management.ConnectionOptions = New System.Management.ConnectionOptions


    oder die kürzere Variante

    VB.NET-Quellcode

    1. Dim conO As New System.Management.ConnectionOptions


    Ohh Mann ... wie oft denn noch der/die Fehler haben NULL, NULL mit meinem Problem zu tun! aber wie ihr wollt wenn ihr unbedingt die Meldungen sehen wollt bitte:


    Woher weißt du dass die Fehler die beim Debuggen kommen NICHTS mit deinem Problem zu tun haben?? Bist du schon so ein Pro??
    Wie du gesehen hast sind die Fehler die die IDE gegeben hat sehrwohl wichtig für uns, denn du hast ja anscheint Syntax Fehler in deinem Code die zu diesen Problemen führen. Also merke dir für die Zukunft, wenn du von uns Hilfe erwartest, dann gib auch die benötigten Informationen raus, ansonsten sehen wir uns außerstande dir zu helfen, schließlich möchtest du von uns ja was, also sei bischel kooperativer und "raste" nicht so aus, als ob wir alle dullis wären, denn mit so einem Verhalten machste dir keine Freunde und so wird dir auch niemand helfen wollen.

    Dodo schrieb:

    Entweder
    Dim conO As System.Management.ConnectionOptions = New System.Management.ConnectionOptions

    oder die kürzere Variante

    Dim conO As New System.Management.ConnectionOptions

    Tags und überschüssige Zeilenumbrüche entfernt

    <Klugsch(enabled:=true)>Sub Post()
    Oder mit automatischemTypenrückschluss :P

    VB.NET-Quellcode

    1. Dim conO = New System.Management.ConnectionOptions

    End Sub

    Beenden von Prozessen über WMI

    Hallo,

    ich versuche Prozesse per WMI zu beenden.
    Dies funktioniert einwandfrei, solange die Prozesse unter meinem Benutzer gestartet wurden.
    Wurde der Prozess von einem anderen Benutzer (hier geht es vorwiegend um Remote Computer, funkioniert aber selbt lokal nicht) gestartet wird der Dienst ohne Fehlermeldung nicht beendet.

    Die Funktion ist relativ Simple :

    VB.NET-Quellcode

    1. Private Function KillProcessWithWMI(ByVal strComputer As String, ByVal Process As String) As String
    2. Dim objWMIService, colProcessList
    3. objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    4. colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Handle = '" & Process & "'")
    5. For Each objProcess In colProcessList
    6. objProcess.Terminate()
    7. Next
    8. Return Nothing
    9. End Function


    Kennst jemand den Grund ? ich arbeite mit Windows 7 64 Professional.

    Für alle schlauen die jetzt mit der Methode Process.kill ankommen, nein das geht bei Remote Computern nicht.

    Und für die die meinen ich soll das per PSKill.exe oder Taskkill.exe uber die Shell machen. Nein auch das funktioniert nicht, mit diesen Tools kann ich gar nichts beenden da Zugriff verweigert wird.
    Über diese Tools kann ich nur dann einen Dienst beenden wenn ich diese im Kompatibilitätsmodus starte.

    Vielleicht weiss hier jemand weiter.

    PS über nen Windows Dienst/Programm den ich installiere auf dem Remote PC gehts genausowenig.