Beiträge von Concara

    Hallo Lashandan!


    Ich verwende bei meinen Scripts auch Parallelisierung damit Scripte schneller abgearbeitet werden.

    Ich würde dir empfehlen jeden einzelnen PC als eigene Abfrage zu starten und die Ergebnise in eine Tempdatei zu schreiben.

    Wenn alle Abfragen abgeschloßen sind, ließt du die Tempdateien ein und erzeugst eine Gesamtdatei.

    (Damit ersparst du dir die Lockfile Problematik.)


    In der Startdatei gibt es eine Variable die $i_ProcessCount heißt. Dort kann man Angeben wieviele Abfragen gleichzeitig starten sollen. Die Anzahl hängt stark davon ab was man im Verarbeitungsscript alles macht.

    Deine Abfrage ist recht schnell abgearbeitet, somit könnte man die Anzahl stark erhöhen und somit wäre die Abfrage sehr schnell erledigt.


    Ich hatte noch einige Ideen wie man diese "gleichzeitigen" Starts dynamisch regeln könnte, habe diese aber noch nicht in das Script eingebaut.

    Man könnte die Speicherauslastung am System von dem man das Script startet, mit einbeziehen und sobald eine gewisse Speichermenge überschritten wird, wird die Anzahl der ausgeführten Scripte reduziert.

    Das gleiche könnte man auch mit der CPU Auslastung machen. Oder natürlich beides.


    Start Script:

    Verarbeitundsprogramm:


    Ich habe herausgefunden, dass es an der Officeversion liegt, weshalb das Script nicht funktioniert.

    Bei der 64 Bit Version hat die Funktion AddToPFFavorites einen Bug.


    Siehe https://officespdev.uservoice.…r-addtopffavorites-method


    Somit wird das nichts mit meinem Script.

    Schade aber danke für deine Hilfe Water!


    Edit:

    Ich kann es nicht lassen :)

    Habe noch etwas weiter im WWW gesucht und diesen Beitrag gefunden.

    https://social.msdn.microsoft.…3-64-bit?forum=outlookdev

    Water sagt dir RDOSession.Logon etwas?

    Kann man das mit deiner UDF (Script) verwenden?

    Und wenn ja wie?

    Hallo Water!


    Leider funktioniert das nicht.

    Code
    1. #include <OutlookEx.au3>
    2. $oOutlook = _OL_Open()
    3. _OL_ErrorNotify(1)
    4. $Local_Folder = _OL_FolderAccess($oOutlook, "Öffentliche Ordner - Max.Mustermann@Musterland.at\Alle Öffentlichen Ordner\Mein Kalender", $olFolderCalendar)
    5. ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    6. $Local_Folder[1].AddToPFFavorites
    7. ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)

    Ich erhalte:

    Hallo Water!


    Hinweis: Es können nur öffentliche Ordner aus dem Favoriten Ordner dieses öffentlichen Ordners in die lokalen Favoriten übernommen werden.

    Das währe genau das was ich brauche, Favoriten von öffentliche Ordner im öffentlichen Ordner zu erstellen.

    Könntest du mir bitte dabei helfen!?

    Danke



    edit:

    Ich habe mich daran versucht aber bin bisher gescheitert.

    Dazu hatte ich diesen VB Code als Vorlage.

    Code
    1. Set olkApp = CreateObject("Outlook.Application")
    2. Set olkSes = olkApp.GetNameSpace("MAPI")
    3. Set olkFolder = olkSes.GetDefaultFolder(olPublicFoldersAllPublicFolders)
    4. Set olkFolder = olkFolder.Folders("Ordner1")
    5. olkFolder.AddToPFFavorites

    Quelle: https://administrator.de/forum…pt-einrichten-216099.html


    Den habe ich auch noch gefunden:

    Quelle: https://stackoverflow.com/ques…n-favorite-folder-of-mail

    Hi Lashandan!


    Sorry ich hatte etwas Stress in der Arbeit, deshalb erst jetzt meine Rückmeldung.

    Hier der Code der dir ID zum Username findet. Es ist eine wimc Abfrage. Leider Dauert die etwas.

    Hallo Lashandan!


    Also ja es gibt noch den HKEY_USER Zweig in der Registry.

    Computer\HKEY_USERS\S-1-5-21-2320686219-2347650492-1140758951-1001\Software\Microsoft\Windows NT\CurrentVersion\Devices

    Ich habe in der Arbeit noch ein Script, das die Id zu einem User herausfindet. Ich werde morgen nachsehen, bin nicht mehr in der Arbeit.

    Ich nehme mal an du schreibst dieses Tool für eine kleine Firma.

    Deshalb habe ich auch das requireAdministrator eingefügt.

    Ist es eine AD Domaine?

    Eine Workgroup ?

    Ohne Administratorenrechte auf den Jeweiligen PCs kannst du rein garnichts auslesen, auch nicht mit den unten angegebenen VBS Scripts.


    Was genau willst du mit dem Programm eigentlich erreichen?

    Denn wenn es eine Firma ist, dann werdet ihr doch eher einen Printserver verwenden.

    Auf diesem werden dann die Standardeinstellungen vorgegeben.

    Wenn es eine AD Domaine ist, dann kann man auch per GPOs Einstellungen vornehmen.

    Oder habt ihr sehr viele Drucker die per USB am jeweiligen PC angeschlossen sind?


    Zum Managen der Drucker gibt es ab Windows 7 eventuell auch schon Vista diesen Ordner (C:\Windows\System32\Printing_Admin_Scripts\de-DE) mit VBS Scripten.

    Info unter https://docs.microsoft.com/de-…/windows-commands/prncnfg

    So noch schnell vor dem Wochende!


    Hier meine quick and dirty Umsetzung.

    Der Code ist alles andere als getestet und eineiges ist noch zu machen.

    Aber es sollte eine Basis darstellen.


    edit : Was ich noch schreiben wollte ist, dass du HKEY_CURRENT_USER zwar remote auslesen kannst, aber soweit ich weiß ist das nicht der User der gerade an der Maschine angemeldet ist, sondern der mit dem du das Script aufgerufen hast.

    Hallo Lashandan!


    Du musst dir in der Hilf noch einmal die Funktionsweise einer Gui anschauen.

    Und ich nenne es mal den eigentlichen Programm Code mit Funktionen zu mischen ist sehr unübersichtlich.

    Standard ist es die Funktionen unterhalb des Hauptcodes zu erstellen.

    Wenn du SciTE verwendest, dann bitte verwende das Tool --> Tidy Autoit Source.

    Dieses Tool bringt deinen Code in eine übersichtlichere Form.

    Das hilft ungemein.


    Dein Programm wird einmal abgearbeitet und bleibt dann in der While Schleife hängen. edit: das ist nicht ganz richtig, aber du verwendest den GUIOnEventMode und das ist soweit ich es beurteilen kann in diesem Fall nicht der richtige.

    Deshalb der Hinweis dir noch einmal die Funktionsweise einer Gui anzusehen.

    Hallo Water!


    Zum Testen habe ich diese Version deines Scripts benützt.

    Ergebnis:

    Hallo Water!


    Ich habe es noch einmal getestet.

    Mit Mailordner funktioniert es solange es ein lokaler Mailordner ist und keiner der im öffentlichen Ordner vorhanden ist.

    Verwendet man Kalender funktioniert es weder mit lokalen Kalendern noch mit denen die im öffentlichen Ordner vorhanden sind.


    Hier die Rückgabewerte von Consolewrite, wenn man einen Kalender aus dem öffentlichen Ordner verwendet:

    Code
    1. 0-1 $oOL.Application.GetNamespace
    2. 0-0 $oOL.Application.ActiveExplorer.NavigationPane
    3. 0-0 $oPane.Modules.GetNavigationModule($olModuleCalendar)
    4. -2147024809-0 $oModule.NavigationGroups.GetDefaultNavigationGroup($olFavoriteFoldersGroup)
    5. 0-0 _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender")
    6. 1-0 $oGroup.NavigationFolders()
    7. 1-0 $oNavFolder.Add($aFolder[1])

    Hallo!


    Ich richte mich mit diesem Post eigentlich direkt an Water, bin aber über jede Hilfe dankbar.

    Ich möchte per Script einen öffentlichen Kalender den Favoriten hinzufügen, damit der Kalender direkt im Outlook unter Kalender aufscheint.

    Dazu habe ich das Web durchsucht und bin auf einen Forumseintrag von Water im englischen Forum gestoßen.

    Leider ist diese Funktion (_OL_NavigationFolderSet) noch nicht in der OutlookEX integriert.

    Water hat dem Suchenden im englischen Forum diesen Code gegeben:

    C
    1. #include "..\OutlookEX.au3"
    2. $oNamespace = $oOL.Application.GetNamespace("MAPI")
    3. $oPane = $oOL.Application.ActiveExplorer.NavigationPane
    4. $oModule = $oPane.Modules.GetNavigationModule(0)
    5. $oGroup = $oModule.NavigationGroups.GetDefaultNavigationGroup(4)
    6. $aFolder = _OL_FolderAccess($oOL, "*\Outlook-UDF-Test")
    7. $oNavFolder = $oGroup.NavigationFolders()
    8. $oNavFolder.Add($aFolder[1])

    Je nachdem was ich bei GetNavigationModule und GetDefaultNavigationGroup eintrage erhalte ich entweder @error 1 oder -2147352567

    Hier noch mein Testcode:

    Hallo Water!


    Ich habe es geteste und es funktioniert einwandfrei, wenn man diese Zeile auskommentiert.

    Array ist vollständig auch wenn ich meinen Exchangekalender verwende.


    Zur _OL_ItemCopy:

    Deine Funktion erstellt ja vom Ursprünglichen Eintrag eine Kopie im Quellordner und versucht dann diese Kopie in den Zielordner zu verschieben.

    Wenn kein Fehler auftritt alles ok.

    So jetzt schafft es die verschieben Funktion (_OL_ItemMove) nicht diesen kopierten Eintrag in den Zielordner zu verschieben.

    Ergebnis Original Eintrag plus kopierten Eintrag sind im Quellordner vorhanden.

    So wenn man das noch mal ausführen würde und es wieder nicht funktioniert erhält man vier Einträge. (exponential)


    Deshalb meine Anregung bei einem Fehler der verschieben Funktion die Kopie des Eintrags im Quellverzeichnis zu löschen.

    Der Ursprüngliche Eintrag ist dann ja immer noch vorhanden.

    In der Funktion steht es ja als Kommentar ja auch drinnen.


    ; Move the copied item to another folder



    P.S. wie kann man syntax highlighting im Forum erstellen? Mit Code funktioniert das nicht!?

    Hallo Water!


    Danke für die Rückmeldung!


    Wenn man im Script _OL_ErrorNotify(3) setzt, erhält man auch den Fehler warum das passiert, nur habe ich noch keine Lösung gefunden es zu umgehen.

    Diese Verhalten ist also im Zusammenspiel mit einem EXchangeserver "normal".

    Verwendet man einen lokalen Kalender (PST File) dann ist da Array vollständig.

    Mein Lösungsansatz war dann dass ich nicht so viele Kalenderelmente auf einmal auslese, dazu habe ich den Abfragezeitraum in meherer Teile unterteilt.

    Aber leider geht dort beim kopieren trotzdem etwas nicht in Ordnung.


    Was sehr stöhrend bei deiner kopieren UDF (_OL_ItemCopy) ist, dass wenn das Object nicht in den Zielkalender verschoben werden kann, es trotzdem im Quellkalender verbleibt. (doppelte Einträge)

    Hier ein Vorschlag wie man diese eventuell anpassen kann. Die Zeilen die ich verändert habe, habe ich mit einem ? am Anfang der Zeile markiert.

    Hi!


    So jetzt wird es mir zu Bund. Ich kann dem Verhalten meines Systems nicht mehr folgen.

    Ich habe die Abfrage ob Col1 ein Objekt ist eingbaut und bei jedem Arrayeintrag ist ein Wahr herausgekommen.

    Also gut statt der EntryId wird jetzt das Objekt an die Kopierfunktion übergeben.

    Ergebins die drei Kalendereinträge die bis jetzt schon nicht kopiert wurden, wurden auch so nicht kopiert.

    Fehler 3 Source and target folder are of different types, kann nicht sein aber ok.

    Dann dachte ich mir "alles neu", Kalendereinträge im Zielordner gelöscht und von vorne.

    Gleicher Zeitraum eingestellt und es wurde rein garnichts kopiert, zumindest nicht in den Zielkalender.

    Im Quellkalender wurden immer mehr Einträge erstellt. Fehler 4 erweitert 6 (4 - Error moving the copied item to the target folder. @extended is set to the COM error)

    Einträge wo die EntryId nicht ausgelesen wurde erhalten den Fehler 3 (Source and target folder are of different types)

    Gut dann halt Zielkalender komplett gelöscht und wieder neu angelegt.

    Gleiches Verhalten.


    Einen Schritt zurück Backup in den Quellkalender eingespielt.

    Die EntryId wird wieder an die Kopierfunktion übergeben.

    Aber die Kalendereinträge werden wieder "nur" im Quellkalender erstellt und können nicht in den Zielkalender verschoben werden. (Fehler 4)

    Was gestern noch funktioniert hat geht jetzt nicht mehr!?


    Hat eventull jemand einen anderen Weg wie ich Kalenderdaten von einem Kalender in einen anderen Kalender bekomme, innerhalb eines bestimmten Zeitraums?

    Also Eingabe eines Von- und Bisdatum und dann kopieren.

    Es soll für einen Endanwender möglichst einfach sein.

    Hallo Water!


    Wie geschrieben verwende ich Outlook 2010 hier die genaue Versionsnummer: 14.0.7227.5000 SP2 MSO 14.0.7228.5001

    es ist eine 64 Bit Version. Verbunden bin ich mit einem Exchange 2010 im Online Modus (kein Cache).


    Die Anhänge zeigen Problem 2.)

    Beim ersten Versuch ist der Zeitraum 30.12.2018 bis 30.09.2020 gewählt und ab Row 141 wird die EntryId nicht mehr ausgelesen!? (Fehler_beim_Auslesen.jpg)

    Gebe ich dann den Zeitraum ab dem der Fehler auftritt ein 10.06.2020 bis 30.09.2020 wird die EntryId ausgelesen.

    (Der_Zeitraum_ohne_Fehler.jpg)


    Hallo AutoITer!


    Wie in der Themabezeichnung geschrieben, möchte ich gerne von einem Kalender (Outlook 2010) Daten innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopieren.

    Dazu habe ich mir die OutlookUDF (Ver. 1.3.4.1) heruntergeladen und ein Programm zusammengestellt.

    Dabei kommt es bei der Ausführung zu folgenden Problemen.

    1.) Ich habe eine Abfrage des Zielordners (Kalender) eingebaut. Führe ich das Script aus dem SciTE aus funktioniert es mit einem Zeitraum >= einem Jahr, ich erhalte keine Fehlermeldung.

    Gebe ich den gleichen Zeitraum ein und starte das Script als compilierte EXE erhalte ich von meiner Ordnerabfrage einen Fehler!?

    2.)Verwende ich einen langen Zeitraum kommt es sehr oft vor, dass beim Auslesen der Kalenderdaten nicht alle Felder eingelesen werden.

    Darunter die für mein Script notwendige EntryId.

    3.)Selbst wenn es scheint das alles funktioniert werden keine Kalendereinträge kopiert. (keine Fehlermeldung)


    Kennt jemand diese Probleme und weiß eine Lösung?

    Ich habe den Verdacht, das die OutlookEx UDF nicht stabil funktioniert.


    @water


    _OL_ItemFind erzeugt aber kein Array wenn man als Attribut Recipients angiebt.
    Es wird ein Fehler ausgegeben Error 4 und Extended Error 1
    Laut deiner UDF Beschreibung:
    4 - Error accessing specified property. For details check @extended
    + n is either 0 (property does not exist) or 1 (Property has invalid case)


    @water


    Wie kann man das Recipients Attribut auswerten?
    Wenn ich es test dann bekomme ich kein Array zurück.
    Alle Attribute die einen String, Boolean, Date, Long zurückgeben werden im Array angezeigt.


    Array wird angezeigt:

    Code
    1. #include <Array.au3>
    2. #include <outlookEX.au3>
    3. Global $oOutlook = _OL_Open()
    4. If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF:", "Error connecting to Outlook. @error = " & @error & ", @extended: " & @extended)
    5. $aItems = _OL_ItemFind($oOutlook, "*\Outlookordner", $olMail, "", "", "", "ReceivedByName,SenderEmailAddress,SenderName,To", "", 1)
    6. _ArrayDisplay($aItems)
    7. $aItems2 = _OL_VersionInfo()
    8. _ArrayDisplay($aItems2)


    Array wird nicht angezeigt:(Attribut Recipients)

    Code
    1. #include <Array.au3>
    2. #include <outlookEX.au3>
    3. Global $oOutlook = _OL_Open()
    4. If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF:", "Error connecting to Outlook. @error = " & @error & ", @extended: " & @extended)
    5. $aItems = _OL_ItemFind($oOutlook, "*\Outlookordner", $olMail, "", "", "", "Recipients", "", 1)
    6. _ArrayDisplay($aItems)
    7. $aItems2 = _OL_VersionInfo()
    8. _ArrayDisplay($aItems2)