Jump to content

Powershell Outlook Kontakte durchsuchen und bearbeiten


Direkt zur Lösung Gelöst von approved_ok,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Über ein externes Programm werden Kontakte in Outlook erstellt.
Teile dieser neuen Kontakte 'Kunden' und 'Lieferanten' ($Contact.Body) sollen gelöscht werden.

 

Nach dem Import der Daten sieht das in Outlook / Kontakte so aus:

1085582038_2022-08-2109_39_51-Kontakte-Outlook.png.f5c02dd6c3097f763e5cbb802695a421.png

 

in der Ordneransicht ist das ein 'Unterordner'

95300465_2022-08-2109_39_51-Kontakte1-Outlook.png.41f46a8a9577059efe48a6d5208762cd.png

 

Im Feld $Contact.Categories ist bei Kunden 'Kundenstamm' und für Lieferanten 'Lieranten' eingetragen - vielleicht hilft das

 

 

Folgenden Powershellscript habe ich dafür probiert, dieser findet jedoch nur die Kontakteinträge im original 'Kontakte' Ordner.

 


# Abrufen des Namespaces

Add-Type -assembly "Microsoft.Office.Interop.Outlook"

$outlook = New-Object -ComObject Outlook.Application

$namespace = $outlook.GetNamespace('MAPI')

#--------------

# Default Contacts folder

$Contacts = $namespace.GetDefaultFolder(10)

$cnt = 0

 

foreach ($Contact in $Contacts.Items)

{

    if($Contact.Body -and $Contact.Categories -like "*Kundenstamm*")

        {

            echo ("--" + $Contact.Categories+ " :" + $Contact.FullName + " ........" + $Contact.Body )

            $cnt++

        }

}

# Anzeige Anzahl bearbeitete Kontakte

$cnt

$outlook.Quit | Out-Null

[GC]::Collect()

 

Frage: wie erreicht man die Unterordner 'Kunden' bzw. 'Lieferanten'

 

Danke im Vorfeld für eure Hilfe

 

 

 

Link zu diesem Kommentar

Mit $Contacts[0] solltest Du den ersten Unterordner erhalten, mit $Contacts["Kunden"] den Kundenordner, unabhängig von dessen Position.

 

Ich weiss nicht, ob $Contacts.Folders einen Enumerator hat. Falls ja, könntest Du mit foreach($Folder in $Contacts.Folders) alle Unterordner durchgehen. Sonst musst Du eine Schleife nehmen mit $Contacts.Folders.GetNext() und die solange ausführen, bis der Rückgabewert $null ist.

 

Beispielcode habe ich nur für VBA gefunden:

Zugriff auf einen Unterordner: https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace.getdefaultfolder

Iteration über alle Unterordner: https://docs.microsoft.com/en-us/office/vba/api/outlook.folders.getnext

Link zu diesem Kommentar
  • Beste Lösung

Danke für die Hilfestellung, hat soweit gut funktioniert:
 

# Abrufen des Namespaces
 
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$outlook = New-Object -ComObject Outlook.Application
 
$namespace = $outlook.GetNamespace('MAPI')
 
#--------------
 
# Default Contacts folder
$Contacts = $namespace.GetDefaultFolder(10)
$KundenContacts = $Contacts.Folders["Kunden"]
$LieferantenContacts = $Contacts.Folders["Lieferanten"]
 
$Kunden_cnt = 0
$Lieferanten_cnt = 0
<#
#------------------------------
# Schleife für Subfolder Kunden
foreach ($Contact in $KundenContacts.Items)
{
    if($Contact.Body -and $Contact.Categories -like "*Kundenstamm*" )
 
        {
 
            Write-Output ("--" + $Contact.Categories+ " :" + $Contact.FullName + " ........" + $Contact.Body )
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...