Registrywert in unbekanntem Schlüssel suchen und ändern

  • Hallo!
    Ich bin neu hier und möchte euch erst einmal recht herzlich begrüßen! Meine Erfahrungen mit der AutoIT-Programmierung gehen gegen 0 :S
    Ich habe mir etwas im Batch programmiert, was unter Win 7 wunderbar funktioniert, unter XP nur leider nicht. Ich versuche mal, mein Problem so genau wie möglich zu beschreiben.

    Die Standardsignatur in Outlook 2010 ist in der Registry in dem Wert "New Signature" hinterlegt. Dieser Wert liegt jedoch bei jedem Benutzer in einem anderen Pfad. Dieser Pfad ist bis zu einem Punkt gleich. Der Pfad ist folgender:

    Zitat

    HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles

    Hier mal meine Batch-Datei

    Spoiler anzeigen

    Der befehl reg query durchsucht die registry ab dem dort genannten Pfad inkl. Unterordner und schreibt mir folgendes in die Textdatei

    Spoiler anzeigen
    Zitat

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000003
    New Signature REG_BINARY 7300690067006E0061007400750072000000

    Suchvorgang abgeschlossen: 1 bereinstimmende Zeichenfolge(n) gefunden.

    Da ich davon allerdings nur den Pfad brauche ziehe ich mir diesen mit "findstr" in eine zweite Textdatei (Ich weiß, eine Variable hätte es auch getan :) )
    Anschließend lasse ich, wenn vorhanden, die Werte New Signature und Reply-Forward Signature löschen und geändert hinzufügen.

    Da der reg query unter XP in dieser Art und Weise jedoch nicht funktioniert, bekam ich von einem Bekannten Admin den Tipp es doch mit AutoIT zu versuchen, da man sich damit eben eine *.exe bauen und diese via loginscript beim Start ausführen kann.
    Jetzt meine Frage. Kann ich meine Problemstellung mit AutoIT lösen und wenn ja, wie? Ich habe bereits das Tuturial sowie den Registrybereich des Buches gelesen und denke, dass ich auch mit AutoIT da nicht wirklich weiterkomme. Seht ihr das anders und habt evtl schon Ideen wie man das umsetzen kann?

    Nette Grüße aus der Lüneburger Heide
    Chris

    Einmal editiert, zuletzt von Crofex (2. Oktober 2012 um 09:49)

  • Grundsätzlich sehe ich hier weder ein Pro noch ein Contra Autoit. Auch mit Autoit kannst du einen Registry Zweig rekursiv durchsuchen, allerdings gibt es dafür denke ich keine fertige Standardfunktion, wie den DOS Befehl "reg query". Du müstest also die Suche mithilfe der wenigen verfügbaren Registry Funktionen von Autoit selbst programmieren, was durch den Einsatz von Schleifen und rekursiven Funktionsaufrufen kein Problem sein sollte. Ok mit deinen Autoitkenntnissen vielleicht schon...

    Da die Suche per Batch unter XP aber bereits erfolgslos ist vermute ich mal, dass auch eine Autoit Umsetzung davon nichts finden würde. Wäre es vielleicht denkbar, dass eine oder mehrere dieser Dinge verantwortlich sind?

    1. Eure XP clients haben garkein Outlook 2010, sondern noch eine ältere Version. Demzufolge befindet sich der Registry Eintrag vielleicht an ganz anderer Stelle, oder existiert eben garnicht?
    2. Unter Windows XP wird der entsprechende Schlüssel an anderer Stelle in der Registry gespeichert.
    3. Du berücksichtigst vielleicht nicht, dass es bezüglich der Registry normalerweise auch eine Unterscheidung zwischen 32 und 64bit gibt, Stichwort "wow6432node"


    Sollte es genügen Informationen über Betriebsystemversion und 32/64 bit Architektur zu erlangen ist Autoit in Kombination der bereits verwendeten DOS Befehle vielleicht auch noch eine Option. Du kannst per Autoit grundsätzlich auch DOS Befehle via run() aufrufen und sofern notwendig je nach Betriebssystem zuvor den richtigen Parameter (in deinem Fall Registry Pfad) ermitteln. Solch eine Mischform ist aber eher nicht zu empfehlen, wenn man auf die Rückgabewerte der externen Programme angewiesen ist. Eine saubere Lösung komplett in Autoit wäre jedenfalls vorzuziehen.


    Zu guter Letzt:

    Abseits von der Registry gibt es auch noch die Möglichkeit viele Anwendungen per API / COM Object zu steuern. Hierzu vielleicht mal schaun ob du eine Autoit UDF zu Outlook 2010 findest, für Excel und Word gibt es jedenfalls derartige Funktionssammlungen. Ob die allerdings mit der 2010er Version kompatibel sind weiß ich nicht.

  • aus der outlookEX-UDF:

    [autoit]


    #include <OutlookEX.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $oOutlook = _OL_Open()

    [/autoit][autoit][/autoit][autoit]

    ; *****************************************************************************
    ; Example 1
    ; List all Email signatures for the current mail account
    ; *****************************************************************************
    Global $aSignatures = _OL_MailSignatureGet()
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_MailSignatureGet Example Script", "Error accessing mail signatures. @error = " & @error & ", @extended: " & @extended)
    _ArrayDisplay($aSignatures, "OutlookEX UDF: All email signatures for the current mail account", _
    -1, 0, "", "|", "Row|Name|Used for new messages?|Used for reply messages?")

    [/autoit][autoit][/autoit][autoit]

    _OL_Close($oOutlook)

    [/autoit]

    Ist ja mal ein Ansatz wert wenn auch nur für dne angemeldeten user..geht doch bestimmt auch für andere ?!?!
    Ansonsten mal water in nem Thread hier ansprechen, der kann dir da bestimmt weiterhelfen..

  • Hallo ihr zwei und herzlichen Dank für die Antworten.

    1. Eure XP clients haben garkein Outlook 2010, sondern noch eine ältere Version. Demzufolge befindet sich der Registry Eintrag vielleicht an ganz anderer Stelle, oder existiert eben garnicht?
    2. Unter Windows XP wird der entsprechende Schlüssel an anderer Stelle in der Registry gespeichert.
    3. Du berücksichtigst vielleicht nicht, dass es bezüglich der Registry normalerweise auch eine Unterscheidung zwischen 32 und 64bit gibt, Stichwort "wow6432node"

    1. Bei uns im Unternehmen ist nur Outlook2k10 im Einsatz. Hier auch nur die 32bit Version. Der Registryeintrag ist an genau der gleichen Stelle wie unter Win7
    2. siehe 1.
    3. Mein Batch wurde auf Win7 -64 und -32bit getestet und wie unter 1. erwähnt haben wir nur Office in der 32-Bit Version im Einsatz.

    Das Problem unter XP ist, dass die Kommandozeile den Fehler "Zu viele Befehlszeilenparameter" ausspuckt. Das liegt daran, dass ich die schalter /v und /s zeitgleich verwende. Win7 kann damit um, XP nicht.

    Ich hab gerade mal die funktionen von OutlookEx durchstöbert und unter anderem dort MailSignatureSet gefunden. Das wäre ja genau das was ich brauche. Für mich zum Verständnis: baut man sich daraus eine exe, ist beinhaltet diese dann auch die OutlookEx extensions und ist somit auf jedem Rechner ausführbar?

    Einmal editiert, zuletzt von Crofex (2. Oktober 2012 um 08:53)

  • Wenn Du das Skript kompilierst, dann ist selbstverständlich die UDF enthalten.
    Die Funktionen _OL_MailSignatureGet und _OL_MailSignatureSet sollten genau das machen was Du brauchst.

  • Ich ziehe meinen Hut vor euch. Danke! Das Get brauch ich nicht mal, das Set reicht mir aus! 1 1/2 wochen rumtüddeln und machen und tun!

    DANKESCHÖN!

  • Schön, dass es so schnell funktioniert!