Alternative zu PsExec gesucht

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von C-Sharp.

    Alternative zu PsExec gesucht

    Hi,
    ich habe ein Programm, welches Outlook-Kontakte exportiert und sie in eine Excel-tabelle schreibt nun möchte ich dieses Programm in meinem Praxis-Netzwerk über Lan vom Server aus auf jedem PC starten und ausführen lassen. Ich programmiere das ganze zu Hause und teste es über die LAN-Verbindung zwischen Tower-PC und Laptop (diese siond nicht über 1 LAN-Kabel verbunden, sondern die Verbindung läuft über 2 Switchs).
    ABER: Will ich nun dsa Programm welches auf dem Laptop liegt per Batch, welche PsExec-Commands verwendet um innerhalb des Netzwerks zu agieren, starten zwar das Programm, die Excel-tabelle bleibt jedoch leer und ich bekomme
    folgende Fehlermeldung: HRESULT 0x800a03ec

    Darunter steht in den aufgeklappten Details:

    Spoiler anzeigen
    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.Runtime.InteropServices.COMException (0x800A03EC): Ausnahme von HRESULT: 0x800A03EC
    bei Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)
    bei Contacts_Export.Form1.Form1_Load(Object sender, EventArgs e)
    bei System.EventHandler.Invoke(Object sender, EventArgs e)
    bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    bei System.Windows.Forms.Form.OnCreateControl()
    bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    bei System.Windows.Forms.Control.CreateControl()
    bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
    bei System.Windows.Forms.Form.WmShowWindow(Message& m)
    bei System.Windows.Forms.Form.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
    ----------------------------------------
    Contacts-Export
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///c:/kontakte/Contacts-Export.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 11.0.50709.17929 built by: FX45RTMREL.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34239 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34250 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34243 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    Microsoft.Office.Interop.Outlook
    Assembly-Version: 15.0.0.0.
    Win32-Version: 15.0.4420.1017.
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.Office.Interop.Outlook/15.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Outlook.dll.
    ----------------------------------------
    office
    Assembly-Version: 15.0.0.0.
    Win32-Version: 15.0.4727.1003.
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/office/15.0.0.0__71e9bce111e9429c/office.dll.
    ----------------------------------------
    Microsoft.Office.Interop.Excel
    Assembly-Version: 15.0.0.0.
    Win32-Version: 15.0.4727.1003.
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.Office.Interop.Excel/15.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Excel.dll.
    ----------------------------------------
    CustomMarshalers
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/CustomMarshalers/v4.0_4.0.0.0__b03f5f7f11d50a3a/CustomMarshalers.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18010 built by: FX45RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.


    ACHTUNG: Wenn ich das Programm lokal (manuell) auf dem Laptop starte, funktioniert alles super. Ebenso kann ich über PsExec von meinem Tower aus z.B cmd auf dem Laptop starten

    Daher denke ich liegt das Problem bei PsExec in Zusammenhang mit meinem Programm :/ Daher wollte ich fragen ob jemand eine Alternative zu PsExec kennt, hierbei wäre wichtig, dass auf dem Empfänger PC kein Programm manuell gestartet werden muss! Sondern, dass man von einem PC aus alles steuern kann :)

    Hier der Code der Batch-Datei:

    Quellcode

    1. @echo
    2. psexec -i -s -d \\andilap c:\kontakte\Contacts-Export.exe
    3. pause


    Und der Code des Programms:

    Spoiler anzeigen
    ~entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adde“ ()

    Dir ist schon klar, dass der aufrufende User auf dem anderen Rechner entsprechende Berechtigungen benötigt.
    Allenfalls musst du eine gültige User/Password-Kombination mit angeben.

    Egal welches Programm du verwendest.
    Wäre ja noch schöner, wenn du auf jedem geschützten Rechner im Netz willkürliche Befehle ausführen könntest.

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Als bessere Alternative zu PSEXEC würde ich die PowerShell empfehlen... Dort kannst du mit Invoke-Command oder Enter-PSSession deine Anwendung starten (Auch mit anderen Credentials)

    technet.microsoft.com/en-us/library/hh849719.aspx

    Beispiel

    Quellcode

    1. ​Invoke-Command -ComputerName RemotePC -Scriptblock {Start-Process -FilePath deinProgramm.exe -ArgumentList "silent"}


    Das Passwort zu deinem Benutzer mit dem das Programm gestartet werden soll, kannst du als SecureString hinterlegen. Somit wird dieses nicht im Klartext gespeichert und kann nur auf der selben Maschine unter dem selben Benutzer wieder entschlüsselt werden.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Vielen Dank erstmal für eure schnellen Antworten

    @ petaod

    petaod schrieb:

    Dir ist schon klar, dass der aufrufende User auf dem anderen Rechner entsprechende Berechtigungen benötigt.
    Allenfalls musst du eine gültige User/Password-Kombination mit angeben.

    Egal welches Programm du verwendest.
    Wäre ja noch schöner, wenn du auf jedem geschützten Rechner im Netz willkürliche Befehle ausführen könntest.


    Das habe ich bereits ausprobiert, ich kann zwar das Programm (wie bei dem Versuch ohne Username und PW Authentifizierung) starten, jedoch bleibt es bei genau demselben Punkt (Der Übertragung der Kontakt-Eigenschaften in die Excel-Tabelle) stehen und gibt mir denselben Fehler-Code aus :/

    @ OMA und C-Sharp

    OMA schrieb:

    Ganz genau wie es petaod sagt, du musst PSEXEC Credentials übergeben, denn es muss ich auch authentifizeren.
    Oder du machst das ganze über eine Active Directory und Kerberos.


    C-Sharp schrieb:

    Als bessere Alternative zu PSEXEC würde ich die PowerShell empfehlen... Dort kannst du mit Invoke-Command oder Enter-PSSession deine Anwendung starten (Auch mit anderen Credentials)

    technet.microsoft.com/en-us/library/hh849719.aspx

    Beispiel

    Quellcode

    1. ​Invoke-Command -ComputerName RemotePC -Scriptblock {Start-Process -FilePath deinProgramm.exe -ArgumentList "silent"}


    Das Passwort zu deinem Benutzer mit dem das Programm gestartet werden soll, kannst du als SecureString hinterlegen. Somit wird dieses nicht im Klartext gespeichert und kann nur auf der selben Maschine unter dem selben Benutzer wieder entschlüsselt werden.




    Ist es bei Active Directory, Kerberos und PowerShell genauso, wie bei PsExec, dass auf dem Empfägsrechner kein Programm aktiv laufen muss (es hat mir ganz gut gefallen, dass man lediglich ein paar Dateien auf den Aussende-Rechner kopieren musste und man konnte den Zeilrechner "steuern") :D
    Die powershell ist auf jedem PC installiert und remoting ist ab der version 2.0 ausgereift. Du musst dies lediglich auf jedem PC einmalig mit dem Befehl "Enable-PSRemoting -Force" oder per GPO aktivieren.

    ActiveDirectory -> Verzeichnisdienst
    Kerberos -> Protokoll/Dienst zur Authentifizierung

    Edit: wenn du dir die Prozessliste deines Remote-PCs abschaust wirst du feststellen das dort PSEXEC ausgeführt wird.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!