netzwerkdude
Goto Top

Outlook via COM (oder anderweitig) .pst Datei erstellen

Moin,

Ich würde gerne via autostart + PS jedem Outlook User eine spezielle .pst verpassen, das internet sagt mir das ichs über COM machen kann (geht auch anders? COM scheint doch sehr lahm zu sein)

$MailPath = "C:\Temp\Test"  

$null = Add-type -AssemblyName "Microsoft.Office.Interop.Outlook"   
$Outlook = new-object -ComObject outlook.application
$Namespace = $Outlook.GetNameSpace("MAPI")  

#Falls noch keine PST existiert, eine neue für den User erstellen:
$Test = Get-ChildItem -Recurse "$MailPath\*.pst"  

if (!$Test) {
    $Namespace.AddStore("$MailPath\Test.pst")  
}
 
else {
    $Test | % { $Namespace.AddStore($_.FullName) }
} 

#Aufräumen
$Namespace.Logoff()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Namespace)
$outlook.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook)

Dazu paar Fragen:
- Die .addstore methode akzeptiert nur den einen Parameter, falls ich einen Namen vorgeben will, muss ichs als zweiten schritt umbenenen, direkt einen Namen geben geht nicht?
hier gibts was von stackoverflow zum thema umbenennen: https://stackoverflow.com/questions/9598536/rename-folders-in-outlook-ps ...
folder = ns.GetFolderFromID(folderid) as Outlook.Folder;
ff
allerdings checke ich nicht ganz woher ich die folderid bekomme...
- Nehme ich da .addstore oder .addstoreEx? Welches Format nimmt Outlook wenn ichs per GUI mache?
https://docs.microsoft.com/de-de/office/vba/api/outlook.namespace.addsto ...

Content-ID: 504677

Url: https://administrator.de/contentid/504677

Ausgedruckt am: 24.11.2024 um 00:11 Uhr

emeriks
Lösung emeriks 14.10.2019 aktualisiert um 14:23:46 Uhr
Goto Top
Hi,
wie langsam ist denn "sehr lahm"?

Und was ist das für eine spezielle PST? Hat diese einen vorgefertigten Inhalt oder geht es nur um einen vorgegebenen Speicherplatz?
Wenn das bei allen Benutzern die gleiche PST wird (Inhalt), dann reicht es wohlmöglich schon, eine PST als Vorlage zu erstellen und diese nur für den Benutzer an den gewünschten Ort zu kopieren und dann im Outlook-Profil einzubinden.

E.
NetzwerkDude
NetzwerkDude 14.10.2019 um 14:27:43 Uhr
Goto Top
Lahmheit: für den ganzen Prozess, COM initialisieren, die .pst machen / einbinden, das com objekt abwickeln = etwa 10 sekunden

Wg. der PST: Eigentlich gehts um eine leere .pst mit einem speziellen Namen, daher könnte dein Plan ganz gut sein, ich nehme einfach dieses Template pst und kopiere es auf Dateiebene statt neu zu erstellen - mal testen.
NetzwerkDude
NetzwerkDude 14.10.2019 um 14:45:54 Uhr
Goto Top
Edit: Soll doch eine dynamische komponente bekommen, daher würde dich doch eine methode zum umbenennen von ordnern benötigen
141320
Lösung 141320 14.10.2019 aktualisiert um 15:32:39 Uhr
Goto Top
Zitat von @NetzwerkDude:

Edit: Soll doch eine dynamische komponente bekommen, daher würde dich doch eine methode zum umbenennen von ordnern benötigen
Store-Root umbenennen kein Problem
$Namespace.AddStore("$MailPath\Test.pst")  
$Outlook.Session.Stores[$Outlook.Session.Stores.Count].GetRootFolder().Name = "BlaBlub"  
https://docs.microsoft.com/en-us/office/vba/api/outlook.folder.name

Wenn ndu kein COM nutzen willst, ist das offizielle MAPI-Interface zur Stelle mit dem du auch ziemliche FIXE Apps mit c++ & Co erstellen kannst:
Outlook MAPI Reference
NetzwerkDude
NetzwerkDude 14.10.2019 aktualisiert um 15:56:15 Uhr
Goto Top
Okay, würde bei mir so aussehen:
($Outlook.Session.Stores | Where-Object {$_.FilePath -like "*test.pst"}).getrootfolder().name = "AutoerstellteTestPST"  
Soweit sogut

Und wie schaut es mit Zugriff / Erstellen / Umbenennen von Unterordner aus?
https://stackoverflow.com/questions/46487943/outlook-delete-items-from-n ...
Das
$Inbox.Folders 
liefert bei mir nur leer face-sad

Edit: das mit der MAPI Interface ist interessant, aber denke für mein bescheidene Programmierskills aktuell wohl zuviel
141320
141320 14.10.2019 aktualisiert um 16:03:38 Uhr
Goto Top
Und wie schaut es mit Zugriff / Erstellen / Umbenennen von Unterordner aus?
Genau so. Für einen Unterordner namens "testordner" im Posteingang des MAPI Stores:
$Namespace.GetdefaultFolder(6).Folders['testordner'].Name = "BlaBlub"  
Einfach mal die VBA Doku für Outlook lesen das ist zu 99% identisch, ist ja nur der Zugriff auf diese über COM von PS aus.
aber denke für mein bescheidene Programmierskills aktuell wohl zuviel
Dann bleibt's halt langsam face-smile, you get what you can.
NetzwerkDude
NetzwerkDude 14.10.2019 aktualisiert um 16:07:38 Uhr
Goto Top
Folders scheint leer zu sein:
$Namespace.GetDefaultFolder(6) | Select-Object -ExpandProperty Folders


Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class       : 15
Session     : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent      : System.__ComObject
Count       : 0
RawTable    : System.__ComObject

EDIT: Ach bin doof, da gibts kein Unterordner, klar ist es leer :D
141320
141320 14.10.2019 aktualisiert um 16:08:43 Uhr
Goto Top
Hier gehts einwandfrei. Du bist sicher das du einen "Unterordner" des Posteingangs umbenennen willst oder doch einen im Root des Stores?
NetzwerkDude
NetzwerkDude 14.10.2019 aktualisiert um 16:23:01 Uhr
Goto Top
Okay passt:
($namespace.Folders | Where-Object {$_.FullFolderPath -like "\\AutoerstellteTestPST"}).Folders.Add("test")  

Denke das passt soweit, muss jetzt nur noch etwas drumherum Fehlerhandling schreiben und das dürfte dann flutschen.

Und find ich gut, wer nicht gscheit programmieren kann, muss mit COM leben :P

Danke soweit