Hallo Gerold,
erstmal die "schlechten" Nachrichten. Bücher gibt es meines Wissens nach nicht und david bringt zwar eine SQL Datenbank mit, die ist aber nur für den Suchindex und den Chat zuständig. Alles andere ist wie eh und je in Dateien abgespeichert (die man allerdings nicht so ohne weiteres lesen und bearbeiten kann, da keine Standardformate wie XML, EML, etc.).
Kommen wir zu den guten Nachrichten:
Die Doku und die Beispiele darin sind recht gut, wenn man sich einmal eingefunden hat. Ich empfehle als Startpunkt das Object Diagram (die Objekte kann man dort auch anklicken und kommt zur entsprechenden Beschreibung). Hier sieht man die Abhängigkeiten und im Prinzip muss man sich auch bei der Programmierung mit der API immer von oben nach unten "durchhangeln".
Z.b. muss man zunächst ein Application Objekt instanziieren um davon ein Account ableiten, dann ein Archive-Objekt und davon dann MessageItems, etc.
Zusätzlich dann die Examples in den verschiedenen Sprachen - auch wenn hier Powershell nicht zur Verfügung steht, sollte man sich aus VB und C# das meiste herleiten können (ich habe das z.B. auch schon mit PHP genutzt).
Die Beispiele bei den einzelnen Objekten und Methoden sind dann oft nur in C/C++, da wirds dann etwas schwieriger mit dem herleiten.
Alle Typen in David sind MessageItems. Die expliziten Typen wie MailItem, FaxItem, etc. werden vom MessageItem abgeleitet.
D.h. mit dem MessageItem und MessageItem2 bekommst Du auch Faxe.
Grundsätzlich bevorzuge ich das MessageItem2, weil es ca. um den Faktor 10 schneller arbeitet. Hier kann man, wie auch beim MessageItem die Fields benutzen (siehe in der Doku innerhalb Objects "Fields", "Field", und "Field2" und ganz unten unter dem Object Diagram "Field ID's).
Für Deine Anforderung ganz speziell sollten dann noch der Eintrag "DvItemFilterBits" (innerhalb Types) interessant sein.
Wenn ich es richtig im Kopf habe, ist eine zeitliche Selektion aber nicht oder nur bedingt möglich oder hat bei mir nicht immer geklappt, kann mich nicht mehr genau erinnern. Da muss man im Zweifelsfall über alle Einträge iterieren und das Datum vergleichen. Für sowas auf jeden Fall das MessageItem2 nutzen, wg. der Performance.
Damit solltest Du einen guten Startpunkt haben.
Der Hauptknackpunkt den Du jetzt noch hast, ist die Verwendung der API in Powershell.
Ich bin einigermaßen bewandert in der Nutzung der Powershell, allerdings nicht mit externen Bibliotheken.
Soweit mir bekannt, kann man aber alle Bibliotheken verwenden, die man auch in .NET verwenden kann, oder?
In PHP muss man z.B. ein COM-Objekt erzeugen, foglend mal ein Beispiel.
Und hier noch ein Link einer schnellen Suche zu dem Thema in Verbindung mit Powershell
// API initialisieren
$dvApi = new COM("DVOBJAPILib.DvISEApi") or die("Cannot create DVApi object");
// Account Objekt erzeugen
// Logon > Methode des IApplication Interfaces, gibt ein Account Objekt zurück
$this->Acc = $dvApi->Logon('','','','','','AUTH') or die("kein Logon");
// Archive Objekt erzeugen
// ArchiveFromID > Methode des Account Objektes, gibt ein Archive Objekt zurück
$this->Archive = $this->Acc->ArchiveFromID($str_archive);
// Alle Einträge des Ordners einlesen
// GetArchiveEntries > Methode des Archive Objektes, gibt eine MessageItem2 Collection (MessageItems2) zurück
// In der Beschreibung dieser Methode findet sich auch ein String-Filter-Typ für die zeitliche Einschränkung über StatusTime
$arr_entries = $this->Archive->GetArchiveEntries("default");
Alles anzeigen
Bei weiteren Fragen einfach wieder melden. Und wenn Du Erfolg hast, schreib es gerne für die Nachwelt hier mal rein.
Viele Grüße
Jens