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

Geschrieben

Ü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

 

 

 

Geschrieben

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

  • Beste Lösung
Geschrieben

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 )
  • Like 1
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...