Variable Daten von Access übernehmen und per MSG verteilen

  • Hallo Leute
    ich bin ein neuer AutoIt'ler. Leider habe ich keine grosse Erfahrung.

    Ich muss aus Access Daten übernehmen welche ich dann per MSG.exe verschicke.

    Den Teil mit dem Verschicken habe ich soweit (Jedoch nur manuell / nicht variabel)

    Der USERNAME und der PCNAME werden mir seitens MS Access zur verfügung gestellt und ich muss dies dann mit dem kleinen Skript verteilen.

    Wie definiere ich die Variablen und wie hole ich die Daten von Access?

    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
    RunAs("BENUTZER", "DOMÄNE", "Passwort", 0, @WindowsDir & "\System32\msg.exe USERNAME /Server:PCNAME NACHRICHT")

    Wäre wirklich froh um eure Hilfe. Gibt ja einige Profis da drin :)

    Grüsse
    Roger

  • so, hier.. hat bissl gedauert, musste noch schnell heim düsen :D

    so in etwa:

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (10. Juni 2015 um 13:01)

  • Hi x0r ich habe dies mal so eingerichtet und versucht....er läuft ohne Fehler durch jedoch bekomme ich keine Nachricht... Muss ich bei den † irgendwas ersetzen?

    $user = StringSplit($strData1, "†")
    $pc = StringSplit($strData2, "†")

    Und spielt es eine Rolle wenn die Datenbank in Office 2010 geschrieben ist. Dort habe ich den Suffix einfach durch .MdB ersetzt.

    Gruss
    Roger

  • Hi,

    das "†" ist nur ein "Platzhalter" zum zerlegen des Strings, im Prinzip kannst du das durch jedes Zeichen ersetzen, das nicht in deiner Tabelle vorkommt (dann aber auch in der Funktion unten).

    Versuch mal die Datenbank im 2007er Format zu speichern, ein Office 2010 hab ich leider nicht :)

    €dit:
    Du kannst Zeile 14-19 auch erstmal auskommentieren und dir dann die Arrays anzeigen lassen mit:
    _ArrayDisplay($user)
    _ArrayDisplay($pc)

    (Dafür war das "Include" oben ursprünglich auch gedacht ;))

    Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (10. Juni 2015 um 16:21)

  • primärschlüssel brauchste doch in access nicht, oder habt ihr identische namen am gleichen pc zur selben zeit? ^^

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ja stimmt.
    habe ich entfernt. Er liest die Werte korrekt aus aber irgendwie scheint er es nicht sauber zu übergeben.

    Leider sehe ich nichts.

    Hier die Werte die er ausliest:

    Row|Col 0
    [0]|1
    [1]|rog0184
    und dann :

    Row|Col 0
    [0]|1
    [1]|SEVPC0041

    Name ist richtig und PC ist auch richtig.

    Er macht auch die CMD-Box auf.....aber die geht sofort wieder zu.

    (dies hatte ich anfänglich auch als ich noch ohne dein Skript unterwegs war...damals war es ein Berechtiungsproblem da nur admins Domänenweit verschicken dürfen) Hatte ich hier jedoch mit einem Serviceaccount gelöst.

    Einmal editiert, zuletzt von rogbal (10. Juni 2015 um 17:11)

  • na dann stimmt dein befehl für "msg.exe" nicht, da kann ich dir leider nicht helfen, da nie benutzt :)

    €dit:
    bei mir gehts hiermit:

    AutoIt
    For $i = 1 To $user[0]
    	DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
    	Run("c:\windows\System32\msg.exe " & $user[$i] & " /Server:" & $pc[$i] & " jojojo")
    Next

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (10. Juni 2015 um 18:49)

    • Offizieller Beitrag

    Nur zur Info,

    Für jeden Aufruf von Wow64DisableWow64FsRedirection muss auch Wow64RevertWow64FsRedirection aufgerufen werden.

    Every call to the Wow64DisableWow64FsRedirection function must have a matching call to the Wow64RevertWow64FsRedirection function. This will ensure redirection is re-enabled and frees associated system resources.

    Im obigen Programm reicht es wenn Wow64DisableWow64FsRedirection einmal vor der Schleife und Wow64RevertWow64FsRedirection nach der Schleife aufgerufen wird.

    So wird Wow64DisableWow64FsRedirection gemäß MSDN richtig aufgerufen

    Spoiler anzeigen
    AutoIt
    Local $sOldVal = DllStructCreate("int")
    Local $pOldVal = DllStructGetPtr($sOldVal)
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $pOldVal)

    und so wird Wow64RevertWow64FsRedirection gemäß MSDN aufgerufen

    Spoiler anzeigen
    AutoIt
    DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "int", $sOldVal)


    Im obigen Programm also z. B. so:

    Spoiler anzeigen