Opsi / Autoit & Netzwerk zugriff

  • Hallo Zusammen,

    ich habe folgende Situation bei der ich Hilfe bräuchte.

    Im Netz steht ein Opsi-Server auf diesem Opsi-Server befinden sich die selbst geschriebenen Autoit-Skripte. Der Opsi-Server wird nur genutzt damit die selbst geschriebenen ".exe"-Dateien verteilt werden können.

    Die Scripte wiederum rufen mit ShellExecute Installations-Dateien auf die auf einem Server liegen in einer Netzwerkfreigabe (\\Server-IP\Installs\Datei.exe). Zum Beispiel die Installationsexe von CDBurner.

    Und an dieser stelle trit das Problem auf und das in mehreren Varianten.

    Das erste Problem bei dem ich nicht weiterkomme ist das beim aufruf der Installationsexe auf dem Server das Windows-Fenster "Netzwerkanmeldeinformationen eingeben" hoch kommt und es nicht möglich ist auf die Datei zu zugreifen ohne die Anmeldedaten einzugeben. Die Frage ist also wie gebe dem AutoIT-Skript diese informationen mit.

    Bei meinen bisherigen Lösungansetzt habe ich es unter anderem mit.

    WinNet_AddConnection / DriveMapAdd und RunAs versucht doch leider ohne Erfolg.

    Die Berechtigungen auf das Netzlaufwerk habe ich auch schon geprüft diese stehen auf jeder. Kopiert man die Script-Exe auf den PC lokal und führt diese dann aus entsteht das Problem nicht.

    Für Ideen oder Anregungen wäre ich sehr dankbar. Sollte noch etwas unklar sein oder genauer erklärt werden müssen bitte einfach bescheid sagen.

    -----

    Mein Code:

    ShellExecute("\\Daten-01\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi")

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "I &agree to the License Agreement and the Privacy Policy", "Button4")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >", "Button1")

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install", "Button1")

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish", "Button1")

    Einmal editiert, zuletzt von Pronetix (17. Januar 2020 um 16:42) aus folgendem Grund: Erweiterung

  • Ich würde von der Netzwerkanmeldung absehen, vor allem wenn du dafür Zugangsdaten hinterlegen müsstest. Da du deine selbstgeschrieben EXE eh mit Opsi verteilst, könntest du auch die Installationsdatei mittels FileInstall an deine EXE anhängen. Die Datei dann einfach ins temporäre Verzeichnis entpacken und von dort aus starten. Im Anschluss das Löschen der Installationsdatei nicht vergessen ;)

    PS: viele Installationsroutinen bieten einen silent Parameter und müssen dann nicht "ferngesteuert" werden

  • Erstmal danke für die Antwort :)

    Genau das soll eben nicht gemacht werden es ist zwingend notwendig das die Daten zentral auf einem Server im Netzstehen.

    Ich muss also irgendwie ne Lösung finden bei der ich die Informationen direkt mit gebe.

  • Um ohne Anmeldeinformationen auf den Server (\\Daten-01) zugreifen zu können, muss der Benutzername und auch das Passwort des angemeldeten Users auf dem Client identisch mit dem auf dem Server sein.

    Müssen Anmeldeinformationen angegeben werden, kannst du das nicht mit ShellExecute machen, da hier keine Möglichkeit besteht, die Anmeldeinformationen mit zu übergeben. Mit RunAs geht dies aber.

    ShellExecute("\\Daten-01\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi")

    #include <AutoItConstants.au3>

    Local $sUserName = "Username", $sPassword = "Password", $sWorkingDir = ""

    RunAs($sUserName, "\\Daten-01", $sPassword, $RUN_LOGON_NOPROFILE, "\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi", $sWorkingDir, @SW_SHOW)

    Die Berechtigungen auf das Netzlaufwerk habe ich auch schon geprüft diese stehen auf jeder.

    Mit Berechtigungen = Jeder sind übrigens nur lokale User gemeint, nicht die, die sich via Netzwerk anmelden. Du musst auch differenzieren zwischen (NTFS-) Berechtigungen und (Netzwerk-) Freigaben.

  • Vielen Dank erstmal für die Rückmeldung.

    Ich hab das jetzt grade versucht aber es passiert nichts. Die Exe für die installation wird nicht aufgrufen.

    ----

    #RequireAdmin

    #include <AutoItConstants.au3>

    #include <MsgBoxConstants.au3>

    Local $sUserName = "Domäne\Administrator", $sPassword = "Passwort", $sWorkingDir = ""

    RunAs($sUserName, "\\Daten-01", $sPassword, $RUN_LOGON_NOPROFILE, "\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi", $sWorkingDir, @SW_SHOW)

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "I &agree to the License Agreement and the Privacy Policy", "Button4")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Next >", "Button1")

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Install", "Button1")

    WinWait("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish")

    WinActivate("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish")

    ControlClick("MailStore Outlook Add-in 9.1.0.10258 Setup", "&Finish", "Button1")

  • Ich hab das jetzt grade versucht aber es passiert nichts. Die Exe für die installation wird nicht aufgrufen.

    Klar, weil du den UserName falsch angegeben hast... das Domäne\ muss da weg - die gibst du mit dem zweiten Parameter an.

    Desweiteren könnte noch der Pfad zur Exe falsch sein. Überprüfe aber auch, ob der User "Administrator" auf dem Server aktiviert ist. Wenn es dann immer noch nicht will, gib mal für WorkingDir @TempDir an.

    Local $sUserName = "Administrator", $sDomain = "Daten-01", $sPassword = "Passwort", $sWorkingDir = @TempDir, $sProgram = "\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi"

    If Not FileExist("\\" & $sDomain & $sProgram) Then Exit MsgBox(16, 'Error', 'MailStoreOutlookAddinSetup... nicht gefunden!' & @CRLF & @CRLF & "\\" & $sDomain & $sProgram)

    RunAs($sUserName, $sDomain, $sPassword, $RUN_LOGON_NOPROFILE, $sProgram, $sWorkingDir, @SW_SHOW)

  • Klar, weil du den UserName falsch angegeben hast... das Domäne\ muss da weg - die gibst du mit dem zweiten Parameter an.

    Desweiteren könnte noch der Pfad zur Exe falsch sein. Überprüfe aber auch, ob der User "Administrator" auf dem Server aktiviert ist. Wenn es dann immer noch nicht will, gib mal für WorkingDir @TempDir an.

    Local $sUserName = "Administrator", $sDomain = "Daten-01", $sPassword = "Passwort", $sWorkingDir = @TempDir, $sProgram = "\Install\MailstoreAddIn\MailStoreOutlookAddinSetup-9.1.0.10258.msi"

    If Not FileExist("\\" & $sDomain & $sProgram) Then Exit MsgBox(16, 'Error', 'MailStoreOutlookAddinSetup... nicht gefunden!' & @CRLF & @CRLF & "\\" & $sDomain & $sProgram)

    RunAs($sUserName, $sDomain, $sPassword, $RUN_LOGON_NOPROFILE, $sProgram, $sWorkingDir, @SW_SHOW)

    Ich habe deinen Code jetzt einmal eins zu eins so übernommen und das Passwort angepasst. Leider bekomme ich aber kein Ergebnis es passiert überhaupt nichts.

    Keine Fehlermeldung nichts das Script läuft einfach ohne das etwas passiert. Woran könnte das liegen?

  • Woran könnte das liegen?

    Hast du das überprüft?

    Überprüfe aber auch, ob der User "Administrator" auf dem Server aktiviert ist.

    Denn wenn der User Administrator deaktiviert ist, schlägt RunAs natürlich fehl... aber das kannst du ja leicht überprüfen.

    Local $iPID = RunAs($sUserName, $sDomain, $sPassword, $RUN_LOGON_NOPROFILE, $sProgram, $sWorkingDir, @SW_SHOW)

    If Not $iPID Or @error Then MsgBox(16, "Error", "$iPID --> " & $iPID & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)

    If Not FileExist("\\" & $sDomain & $sProgram) Then Exit MsgBox(16, 'Error', 'MailStoreOutlookAddinSetup... nicht gefunden!' & @CRLF & @CRLF & "\\" & $sDomain & $sProgram)

    Hier fehlt bei FileExist noch ein s... also FileExists! Anderfalls bricht der Interpreter die Ausführung des Scripts sofort ab und SciTE präsentiert einen Fehler: error: FileExist(): undefined function.

    Evtl. aber läuft das Programm einfach nur nicht auf dem Betriebssystem des Clients.

    Wenn du auf dem Server eine Eingabeaufforderung öffnest und dort den Befehl net user administrator eingibst, kannst du sehen, ob das Benutzerkonto des Users Administrator aktiv ist und ob ein Passwort gesetzt wurde.

  • Erst einmal vielen dank für deine Zeit und Hilfe.

    Aber ich habe es jetzt komplett anders gelöst bekommen. Meine Scripte laufen jetzt alle mit ShellExecute. Der Knackpunkt an der Sache war das unter Programme86 es einen Folder gab vom Opsi in diesem war ne Conf-Datei in der stand welcher User für eine Netzwerkanmeldung genutzt wird. Setzt man hier den Domäne\Adminuser ein (glaub der war standard bei Opsi wie Root) und erstellt diesen dann im AD hat man mit diesem User zugriff auf den Opsi und auf die NTFS-Freigabe.

    PS: Das dort ein S gefehlt hab hatte ich bereits gemerkt :) und das Programm ist für das System geeignet ich kann es ja ohne Probleme aufrufen und installieren wenn ich es manuell mache.