derwowusste
Goto Top

Kalender in Outlook-Datendatei per Skript von Notizen befreien

Moin Kollegen.

Hat sich jemand mal damit befasst? Die Anforderung ist schon sehr speziell.
Ich finde mehrere Tools, die per Skript alle Anhänge aus einer PST nehmen, aber noch keins, welches auch alle Notizen aus Terminen im Kalender dieser PST entfernt - das ist hier erwünscht, die Termine selbst (Zeiten, Betreff, Teilnehmer) sollen bestehen bleiben.

Content-Key: 554562

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

Printed on: May 3, 2024 at 11:05 o'clock

Member: colinardo
Solution colinardo Mar 05, 2020 updated at 15:12:40 (UTC)
Goto Top
Servus DWW,
kleiner PS Schnippsel der das erledigt
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
$objOL.GetNamespace("MAPI").GetDefaultFolder(9).Items | ?{$_.Body -ne ''} | %{$_.Body = "";$_.Save()}  
Der Code oben macht das bei der momentan eingebundenen Standard-PST, falls du das bei einer anderen PST-Datei machen willst geht das auch mit ein paar Erweiterungen. (Pfad zur PST anpassen).
# pst path
$pst = "E:\backup.pst"  
# ===================
# load outlook com object
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
# namespace object
$ns = $objOL.GetNamespace("MAPI")  
# add pst to session
$ns.AddStore($pst)
# get added store for pst
$ns.Stores | ?{$_.FilePath -eq $pst} | %{
    # find all calendars in root
    $_.GetRootFolder().Folders | ?{$_.DefaultItemType -eq 1} | %{
        # remove body of all messages with body content
        $_.Items | ?{$_.Body -ne ''} | %{$_.Body = '';$_.Save()}  
    }
    # close store
    $ns.RemoveStore($_.GetRootFolder())
}
Grüße Uwe
Member: DerWoWusste
DerWoWusste Mar 05, 2020 at 14:40:32 (UTC)
Goto Top
Servus!

Wie ich Dich kenne, läuft das wie geschmiert. Habe jedoch schon Feierabend gemacht für heute und teste es morgen.
Danke
Member: DerWoWusste
DerWoWusste Mar 06, 2020 at 08:28:44 (UTC)
Goto Top
Nicht weniger als "perfekt".

Vielen Dank ein weiteres Mal!
Wenn Du so im Stoff stehst, kannst Du noch eine Zeile hinzupacken, die auch die Teilnehmerliste entfernt? Hier greift sicherlich bald wieder die Paranoia um sich und das wird auch noch gewünscht.
Member: colinardo
colinardo Mar 06, 2020 updated at 09:03:26 (UTC)
Goto Top
Freut mich wenn ich helfen konnte face-smile.

Zitat von @DerWoWusste:
Wenn Du so im Stoff stehst, kannst Du noch eine Zeile hinzupacken, die auch die Teilnehmerliste entfernt? Hier greift sicherlich bald wieder die Paranoia um sich und das wird auch noch gewünscht.

Für den ersten Code
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
$objOL.GetNamespace("MAPI").GetDefaultFolder(9).Items | %{  
    $_.Body = ''  
    $_.RequiredAttendees = ''  
    $_.OptionalAttendees = ''  
    $_.Resources = ''  
    $_.Save()
}
Für den Zweiten
# pst path
$pst = "E:\backup.pst"  
# load outlook com object
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}
# namespace object
$ns = $objOL.GetNamespace("MAPI")  
# add pst to session
$ns.AddStore($pst)
# get added store for pst
$ns.Stores | ?{$_.FilePath -eq $pst} | %{
    # find all calendars in root
    $_.GetRootFolder().Folders | ?{$_.DefaultItemType -eq 1} | %{
        # clear message properties
        $_.Items | %{
            $_.Body = ''  
            $_.RequiredAttendees = ''  
            $_.OptionalAttendees = ''  
            $_.Resources = ''  
            $_.Save()
        }
    }
    # close store
    $ns.RemoveStore($_.GetRootFolder())
}

Entfernt in beiden Fällen zusätzlich die "RequiredAttendees", "OptionalAttendees" und alle "Resource" Objects aus den Terminen. Kann du ja jetzt nach belieben anpassen.
Weitere Eigenschaften von Terminen (AppointmentItems) kannst du in der API-Doku nachschlagen falls noch was gewünscht sein sollte:
https://docs.microsoft.com/de-de/office/vba/api/outlook.appointmentitem# ...

Schönes WE
Uwe
Member: DerWoWusste
DerWoWusste Mar 06, 2020 at 09:24:10 (UTC)
Goto Top
Top, auch das funktioniert.
Danke auch für den Link zur Doku!