knowhow0705
Goto Top

Globale Adressliste Outlook exportieren und Exchange importieren?

besteht die Möglichkeit lokal gespeicherte Kontakte in Outlook in die globale Adressliste in Exchange zu importieren?

Content-Key: 615215

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

Printed on: April 25, 2024 at 01:04 o'clock

Member: emeriks
emeriks Oct 22, 2020 updated at 12:11:48 (UTC)
Goto Top
Hi,
sowas könnte man sicher in VBA scripten.
Wo sollen die denn da landen? Als emailaktivierte Kontakt-Objekte im AD oder in einem Öffentlichen Ordner von Exchange?

E.
Member: knowhow0705
knowhow0705 Oct 22, 2020 at 12:12:03 (UTC)
Goto Top
hab aber leider keine vba erfahrung, ansonsten geht das nicht über die Exchange Konsole, eingabe über csv oderso ?
Member: emeriks
emeriks Oct 22, 2020 updated at 12:14:45 (UTC)
Goto Top
Zitat von @knowhow0705:
hab aber leider keine vba erfahrung,
Ungünstig.
ansonsten geht das nicht über die Exchange Konsole, eingabe über csv oderso
Jain.
Man kann Outlook-Kontakte exportieren. Bestimmt auch als CSV.
Und es gibt genug Anleitungen im Web, wie man AD-Objekte aus CSV-Dateien importieren kann. ("Massenimport") (hier als Kontakt-Objekte)
Beides muss man jetzt nur zusammenbringen.
Member: colinardo
colinardo Oct 22, 2020 updated at 17:28:43 (UTC)
Goto Top
Servus erst mal, so viel Zeit sollte noch sein @knowhow0705!
Zitat von @knowhow0705:

besteht die Möglichkeit lokal gespeicherte Kontakte in Outlook in die globale Adressliste in Exchange zu importieren?
Kurz und knapp, ja, Beispiel mit Powershell:
(Skript hat keine weiteren Modul-Abhängigkeiten, es muss also kein AD- oder EX-Modul installiert sein, und wird mit dem Account ausgeführt bei dem die Kontakte in Outlook liegen, es müssen nur einmalig entsprechende Credentials für den Exchange/AD angegeben werden)
Könnte man jetzt auch mit EWS Scripten aber zur Abwechslung mal so
# get credentials to access ad and exchange server
$excreds = Get-Credential -Message "Enter credentials valid to edit objects in Exchange and AD:"  
if (!$excreds){return}

# load outlook object
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$objOL){$objOL = New-Object -Com Outlook.Application}

# choose outlook folder via dialog picker
write-host "Please choose contactfolder from Outlook-Dialog, and allow access to contacts)" -F Magenta  
$contactfolder = $objOL.Session.PickFolder()
if(!$contactfolder){return}
if ($contactFolder.DefaultMessageClass -ne 'IPM.Contact'){  
    throw "Folder is not a contact folder!"  
    Read-Host "`nPress enter to exit"  
    return
}
write-host "Folder choosen: $($contactfolder.FullFolderPath)"  

# mapping between AD properties and outlook properties
$propertymapping = @{
    streetAddress = 'MailingAddressStreet'  
    l = 'MailingAddressCity'  
    postalCode = 'MailingAddressPostalCode'  
    postOfficeBox = 'MailingAddressPostOfficeBox'  
    st = 'MailingAddressState'  
    homePhone = 'HomeTelephoneNumber'  
    pager = 'PagerNumber'  
    mobile = 'MobileTelephoneNumber'  
    facsimileTelephoneNumber = 'HomeFaxNumber'  
    ipPhone = 'IMAddress'  
    department = 'Department'  
    company = 'CompanyName'  
    info = 'Body'  
    title = 'JobTitle'  
    initials = 'Initials'  
}

$session = $null
# Connect to Exchange
try{
    # determine Exchange server FQDN from AD
    $exchange_server = (new-object adsisearcher("LDAP://$(([adsi]'LDAP://rootDSE').configurationNamingContext)","(objectClass=msExchExchangeServer)","networkaddress",[System.DirectoryServices.SearchScope]::Subtree)).FindOne() | %{$_.Properties['networkaddress'] | ?{$_ -match 'ncacn_ip_tcp'} | %{$_.split(":")[1]} | select -First 1}  
    if (!$exchange_server){Write-Host "Could not determine Exchange-Server FQDN from AD" -ForegroundColor Red; return}  
    write-host "Creating connection to Exchange-Server '$exchange_server' ..." -ForegroundColor Green  
    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$exchange_server/powershell/?SerializationLevel=Full" -Authentication Kerberos -Credential $excreds  
    Import-PSSession $session -DisableNameChecking -AllowClobber | out-null
}catch{
    throw $_
    Read-Host "`nPress enter to exit"  
    return
}

# for each contact
foreach ($olcontact in $contactFolder.Items){
    $mc = $null
    # check if contact does not exists create it
    if (!($mc = Get-MailContact $olcontact.FullName -EA SilentlyContinue)){
        write-host "Creating new exchange mail contact '$($olcontact.FullName)' ... " -NoNewline -F Green  
        try{
            $mc = New-MailContact -FirstName $olcontact.FirstName -LastName $olcontact.LastName -ExternalEmailAddress $olcontact.EMail1Address -Name $olContact.FullName -EA Stop
        }catch{
            write-host $_.Exception.Message -F Red
            continue
        }
    }else{
        write-host "Updating existing mail contact '$($olcontact.FullName)' ... " -NoNewline -F Cyan  
    }
    # get directory entry
    $contact = new-Object adsi "LDAP://$($mc.DistinguishedName)",$excreds.UserName,$excreds.GetNetworkCredential().Password  
    # set contact advanced properties
    $propertyMapping.GetEnumerator() | ?{$olcontact.($_.Value) -ne ''} | %{  
        $contact.InvokeSet($_.Key,$olcontact.($_.Value))
    }
    # save contact object
    try{
        $contact.CommitChanges()
        write-host "OK." -F Green  
    }catch{
        write-host $_.Exception.Message -F Red
    }
}

# close exchange session
if ($session){
    Remove-PSSession $session
}

Read-Host "`nPress enter to exit"  
Viel Spaß

Grüße Uwe

(Anpassung-Support nur via PN )