psexec mit vb.net ausführen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    psexec mit vb.net ausführen

    Ich möchte mit psexec eine bat Datei (netsh Kommando) ausführen.

    Das Kommando sieht wie folgt aus:

    Quellcode

    1. "C:\Program Files (x86)\PSTools\psexec.exe" \\test01 "\\test01\c$\Users\Administrator\Downloads\wlan_aufheben.bat"


    Dies funktioniert über die cmd einwandfrei.

    Da jeder Computer einen anderen Namen hat test01, test02, test03.... möchte ich über eine Schleife in vb.net dies automatisch durchführen.
    Leider konnte ich keinen passendes Befehl finden, der mir dieses cmd Kommando über vb.net durchführt.

    Ich habe folgendes versucht:

    Quellcode

    1. Process.Start("C:\Program~2\PSTools\psexec.exe \\" & name & " \\" & name &"\c$\Users\Administrator\Downloads\wlan_aufheben.bat")


    Leider wird da nichts ausgeführt

    Hoffe es kann mir jemand weiterhelfen.
    Danke

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „haiflosse1“ ()

    Danke für die Antwort.
    Leider habe ich die Links zu ss64.com nicht ganz verstanden.

    Dabei handelt es sich nicht um einen vb.net code sondern um ein bat File, dass dann in der Kommandozeile in Windows durchgeüfhrt werden kann - oder?

    Vielleicht kannst du mir noch ein Beispiel oder Unterstützung geben wie ich in meinem Fall beginnen kann.
    Danke
    Hallo,
    wenn ich mir so deine Threads anschaue, solltest du anstelle alles manuell machen zu wollen, dir mal Mandatory User Profiles anschauen. Das richtest du einmal ein, weist das Profil dem/den Benutzer/n zu und die Rechner setzen sich immer wieder auf den definierten Zustand zurück. Ist ideal für Schulcomputer.
    Danke für den Hinweis.
    Werde ich mir einmal ansehen, obwohl ich nicht gesehen habe zu welchem Zeitpunkt die individuellen Einstellungen und zusätzlichen Drucker und Treiber, Aufgaben u.s.w. eingerichtet werden.

    Ich habe das psexec Kommando einmal mit ms-access über vba durchgeführt. Dies funktioniert dort wunderbar.
    Hier mein code von vba:

    Quellcode

    1. Dim sAppName As String
    2. sAppName = "C:\Progra~2\PSTools\psexec.exe \\test01 \\test01\c$\Users\Administrator\Downloads\wlan.bat"
    3. Call Shell(sAppName, 1)


    Dachte es funktioniert auch in vb.net.
    lg
    Danke für die Antwort.
    Ich habe in der Doku noch gesehen, dass ein Username, Passwort und Domain mit angegeben werden soll.
    Dies habe ich nun wie folgt ergänzt.

    Quellcode

    1. Process.Start("C:\Program~2\PSTools\psexec.exe \\" & name & " \\" & name &"\c$\Users\Administrator\Downloads\wlan.bat", "administrator", ToSecureString("passwort"), "")


    Quellcode

    1. Public Shared Function ToSecureString(source As String) As SecureString
    2. If String.IsNullOrWhiteSpace(source) Then
    3. Return Nothing
    4. End If
    5. Dim result = New SecureString()
    6. For Each c As Char In source
    7. result.AppendChar(c)
    8. Next
    9. Return result
    10. End Function


    Bei der Domain habe ich "" angegeben, da ich nur eine Arbeitsgruppe "TEST" verwende. Ich habe auch TEST ausprobiert, leider wird aber die bat Datei nicht ausgeführt.
    Vielleicht hat noch jemand eine Idee woran es liegen könnte.
    Danke
    Hallo!
    Ich habe jetzt herausgefunden, warum der Befehl nicht funktioniert.

    Ich verknüpfe vorher ein Netzlaufwerk als Administrator und danach trenne ich die Verbindung wieder.
    Das Problem ist jetzt, dass beim Start des Prozesses nicht gewartet wird, bis dieser fertig ist, daher wird die Netzwerkverbindung sofort wieder getrennt und somit kann ich das psexec Kommando nicht schicken.

    Ich habe daher im Code versucht nach dem Process.Start ein

    Quellcode

    1. process.WaitForExit()

    einzufügen, leider ohne Erfolg.

    Auch möchte ich gerne dass kein Fenster beim Processtart geöffnet wird.
    Da habe ich folgende Befehle versucht einzugeben:

    Quellcode

    1. process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    2. process.StartInfo.CreateNoWindow = True
    3. process.StartInfo.UseShellExecute = False


    Leider öffnet sich aber noch immer ein Fenster wenn der Prozess gestartet wird.

    Vielleicht kann mir jemand nochmals weiterhelfen.
    Danke
    @haiflosse1
    Ein DOS Programm aus einem anderem Programm auszuführen ist immer eine Behelfskrücke. psexec nutzt auch nur entsprechende APIs/Schnittstellen des Windows Systems. An dieser Stelle habe ich immer das Bedürfnis herauszufinden, was das Programm da eigentlich im Hintergrund veranstaltet. Mit entsprechenden Tools kann man genau mittracken, welche APIs, Const, Structs usw. bei entsprechender Aktion verwendet werden. Alternativ kann man auch versuchen den Sourcecode zu finden. Für psexec findet man zumindest ein Replacement Projekt auf GitHub mit dem Namen PAExec inkl. Sourcecode. Da kann man sich so einiges von Abschauen.
    Mfg -Franky-