WSUSPraxis 17 Posted November 12, 2020 Report Share Posted November 12, 2020 (edited) Hallo und Guten Morgen, Umgebung: Exchange Online mit Office 365 Outlook Clients Es wurde von einem Dienstleister für eine Mitarbeiter per CRM Online Sync eine falsche Kategorie mit Demo Adressen an Mitarbeiter verteilt, welche nun jeder Mitarbeiter in Outlook hat. Die Adressen serverseitig per Exchange Online Powershell zu löschen brachte nicht wirklich den Erfolg: Get-Mailbox -Filter '(RecipientTypeDetails -eq "UserMailbox")' | search-mailbox -Searchquery 'kind:contacts AND subject:" -Falsche Kategorie"' -DeleteContent Nun der nächste Versuch über ein Script bei Outlook anzusetzen und hier pro User die Kategorie und Adressen zu löschen: Früher habe ich das mal so gelöst per VBA als Makro - Aber das war 2004: Private Sub Kontakte_löschen() ' Löschen von Kontakten einer Kategorie Dim appOL As New Outlook.Application Dim olns As NameSpace Dim fld As MAPIFolder Dim itms As Items Dim itm As Variant Set olns = appOL.GetNamespace("MAPI") Set fld = olns.GetDefaultFolder(olFolderContacts) Set itms = fld.Items For Each itm In itms If itm.Categories = "Kategorie" Then itm.Delete End If Next End Sub Ich will das aber nicht mehr als Makro per VBA machen . Hat jemand eine Idee wie das am besten gelöst werden kann ? Edited November 12, 2020 by WSUSPraxis Quote Link to post
MurdocX 244 Posted November 12, 2020 Report Share Posted November 12, 2020 (edited) Ich finde VBA nicht schlecht Alternativ, falls du etwas neueres brauchst, könntest du auf die Powershell switchen. Anzubieten hätte ich folgendes: $outlook = New-Object -ComObject Outlook.Application $namespace = $outlook.GetNamespace("MAPI") # Entferne alle Kategorien foreach($categorieItem in $namespace.categories) { $namespace.Categories.Remove($categorieItem.Name) } Vermerk an mich: Nicht alles geschriebene gleich ausprobieren Edited November 12, 2020 by MurdocX 1 Quote Link to post
WSUSPraxis 17 Posted November 13, 2020 Author Report Share Posted November 13, 2020 vor 7 Stunden schrieb MurdocX: Ich finde VBA nicht schlecht Alternativ, falls du etwas neueres brauchst, könntest du auf die Powershell switchen. Anzubieten hätte ich folgendes: $outlook = New-Object -ComObject Outlook.Application $namespace = $outlook.GetNamespace("MAPI") # Entferne alle Kategorien foreach($categorieItem in $namespace.categories) { $namespace.Categories.Remove($categorieItem.Name) } Vermerk an mich: Nicht alles geschriebene gleich ausprobieren Hallo und Guten Morgen, Danke Dir ! Aber lösche ich nicht damit alle Kategorien ? Ich bekomme den Sprung nicht hin, nur die bestimmte zu suchen und zu löschen. Viele Grüße Arnd Quote Link to post
MurdocX 244 Posted November 13, 2020 Report Share Posted November 13, 2020 Guten Morgen, ja das stimmt. Momentan entfernst du damit alles. Zu lösen wäre das mit einem Array. Sind es bei allen die Gleichen? Wie viele wären das denn? Quote Link to post
WSUSPraxis 17 Posted November 13, 2020 Author Report Share Posted November 13, 2020 vor 29 Minuten schrieb MurdocX: Guten Morgen, ja das stimmt. Momentan entfernst du damit alles. Zu lösen wäre das mit einem Array. Sind es bei allen die Gleichen? Wie viele wären das denn? Guten Morgen, In der Falschen Kategorie, es ist nur eine, sind ca. 200 Testadresssen. Die Falsche Kategorie muss raus und die 220 Testadressen. Viele Grüße Arnd Quote Link to post
MurdocX 244 Posted November 15, 2020 Report Share Posted November 15, 2020 Mehrere prüfst du gegen ein Array, wie in diesem Beispiel: # Zu löschende Kategorien [string[]]$zuLoeschendeKategorien = 'Test1','Test2','Test3' # Abrufen des Namespaces $outlook = New-Object -ComObject Outlook.Application $namespace = $outlook.GetNamespace('MAPI') # Verarbeite alle Kontakte foreach($contactItem in $namespace.GetDefaultFolder(10).items) { #$contactItem -> Das ist ein Kontakt } # Verarbeite alle Kategorien foreach($categorieItem in $namespace.categories) { if($zuLoeschendeKategorien -contains $categorieItem.Name) { # Lösche die betreffende Kategorie $namespace.Categories.Remove($categorieItem.Name) } } Ohne Beispiele fast unmöglich treffende Skripte zu schreiben. Wenn du Dir mein Beispiel ansiehst, dann kannst du mit der ForEach für Kontakte ein bisschen spielen. Hier fehlt nur noch die Abfrage nach dem Namen, dann kannst du den Kontakt löschen. Nimm Dir Visual Studio Code oder die PowershellISE zur Hand. Die Software wird dich gut unterstützen. Quote Link to post
WSUSPraxis 17 Posted December 4, 2020 Author Report Share Posted December 4, 2020 Hallo Jan, vielen Dank für die Hilfe ! Es tut mir leid für die späte Rückmeldung ! Es hat super Gut geklappt. Viele Grüße Arnd Quote Link to post
MurdocX 244 Posted December 6, 2020 Report Share Posted December 6, 2020 Gern geschehen und danke der Rückmeldung. Könntest du die Lösung noch markieren? Quote Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.