WSUSPraxis 48 Geschrieben 12. November 2020 Melden Teilen Geschrieben 12. November 2020 (bearbeitet) 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 ? bearbeitet 12. November 2020 von WSUSPraxis Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 12. November 2020 Melden Teilen Geschrieben 12. November 2020 (bearbeitet) 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 bearbeitet 12. November 2020 von MurdocX 1 Zitieren Link zu diesem Kommentar
WSUSPraxis 48 Geschrieben 13. November 2020 Autor Melden Teilen Geschrieben 13. November 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 Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 13. November 2020 Melden Teilen Geschrieben 13. November 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? Zitieren Link zu diesem Kommentar
WSUSPraxis 48 Geschrieben 13. November 2020 Autor Melden Teilen Geschrieben 13. November 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 Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 15. November 2020 Melden Teilen Geschrieben 15. November 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. Zitieren Link zu diesem Kommentar
WSUSPraxis 48 Geschrieben 4. Dezember 2020 Autor Melden Teilen Geschrieben 4. Dezember 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 Zitieren Link zu diesem Kommentar
Beste Lösung MurdocX 949 Geschrieben 6. Dezember 2020 Beste Lösung Melden Teilen Geschrieben 6. Dezember 2020 Gern geschehen und danke der Rückmeldung. Könntest du die Lösung noch markieren? 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.