Suchen

Tipps und Tricks zum Microsoft Script Center So geht’s: PowerShell-Skript für den Massenimport von Kontakten

| Autor / Redakteur: Frank Castro Lieberwirth / Dipl.-Ing. (FH) Andreas Donner

IP-Insider zeigt Ihnen, wie Sie mit dem MS Script Center ein PowerShell-Skript für den automatischen Massenimport von Kontaktdaten in Active Directory und Exchange Server 2010 erstellen.

Firma zum Thema

IP-Insider zeigt den automatischen Massenimport von Kontaktdaten in AD und Exchange via PowerShell-Skript.
IP-Insider zeigt den automatischen Massenimport von Kontaktdaten in AD und Exchange via PowerShell-Skript.

Das Microsoft „Script Center“ ist ein Eldorado für alle, die Aufgaben in Form eines Skripts automatisieren wollen. Neben den technischen Grundlagen zu PowerShell und Visual Basic findet der Leser hier auch zahlreiche Programmbeispiele.

Dabei profitiert Microsoft in seiner „TechNet Script Center Repository“ von vielen freien Autoren, die ihre Skripte veröffentlichen. Diese dynamische Community löst so manches Buch ab und verkürzt Entwicklungszeiten eines Skripts auf wenige Minuten, wie folgendes Beispiel zeigt.

Bildergalerie

Aufgabe & Methodik – Massenimport von E-Mail-Kontakten in Active Directory für Exchange Server 2010

Die Wahl der Skriptsprache fällt auf die PowerShell 2.0, da es sowohl für Active Directory, als auch für Exchange Server 2010 PowerShell-Module gibt, die die o.g. Aufgaben erfüllen können. Doch welche Kriterien soll der Massenimport erfüllen und mit welcher Methodik verwendet man das Script Center?

Eine Suche zeigt, dass es kein „fertiges“ Powershellskript gibt. Es muss also nach geeigneten Ideen gesucht werden. Folgende Möglichkeiten bieten sich an:

  • 1. Massenimport über CSV-Datei bzw. Export von Excel – Stichwort „CSV“ und „Import“
  • 2. Eine einfache Programmschleife erfasst Elemente aus der SCV-Datei
  • 3. Der User hat als Exchange- und Active-Directory-Administrator Berechtigungen, Kontakte anzulegen.
  • 4. Eine Suche im Exchange- und AD-Hilfetext ergibt die Lösung – Stichwort „New Contact“

Importdatei

Um die CSV-Datei (Datei: liste.csv; die Namen sind frei erfunden) übersichtlich zu gestalten, enthält sie neben der Kopfzeile zunächst nur zwei Elemente:

Name;Extern
Max Muster;MaxMuster@MaxundMoritz.de
Willi Meister;Willi.Meister@MeisterundCo.de

Schleifen in PowerShell und importieren von CSV-Dateien

Hier hilft entweder ein Blick in den Bücherschrank oder in die Suchfunktion des Scriptcenters, was in vielen Fällen die schnellere Variante ist. Die Suche zeigt ein Beispielskript von Hr. Thierry Mille an, das einen Massenimport aus einer CSV-Datei von normalen Konten in Active Directory durchführt. Er verwendet eine einfache foreach-Schleife mit Variablen, wobei eine Verkettung mit den Elementen (1. Zeile!) der CSV-Datei vorgenommen wird.

# Thierry Mille, http://gallery.technet.microsoft.com/scriptcenter/ed20b349-9758-4c70-adc0-19c5acfcae45
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path ".\userslist.csv"
foreach ($User in $Users)
{
$OU = "OU=Employees,DC=lab-os,DC=com"
$Password = $User.password
$Detailedname = $User.firstname + " " + $User.name
$UserFirstname = $User.Firstname
$FirstLetterFirstname = $UserFirstname.substring(0,1)
$SAM = $FirstLetterFirstname + $User.name
New-ADUser -Name $Detailedname -SamAccountName $SAM -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $user.firstname -Surname $user.name -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) -Enabled $true -Path $OU
}

Da in unserem Projekt jedoch keine neuen Benutzer anzulegen sind, sondern „nur“ E-Mail-Kontakte muss das Cmdlet „New-ADUser“ entsprechend substituiert werden. Natürlich stimmen dann auch die Eingangsvariablen hinsichtlich Namen und Funktion nicht mehr. Ein Blick auf die Exchange Hilfe zeigt das passende Exchange Cmdlet zum Erstellen eines Kontakts: New-Mailcontact

Bausteine zusammensetzen

Anhand des Beispielskripts wird die Schleife mit der CSV-Datei und des Mailkontakterstellung wie Folgt durchgeführt:

# Skript von Frank Castro Lieberwirth
# Container
$Users = Import-Csv -Delimiter ";" -Path ".\liste.csv"
# Foreach-Schleife listet die einzelnen Elemente des Containers auf, vergl. auch Foreach-Objekt
foreach ($User in $Users)
{
# Variable Zielcontainer in Active Directory
$OU = "OU=ExternalContacts,DC=MyDomain,DC=local"
# Variable Benutzername: Verkettung mit der 1. Zeile in der CSV-Datei
$UserName = $User.Name
# Variable externe Adresse: Verkettung mit der 1. Zeile in der CSV-Datei
$ExternalAddress = $User.Extern
# Neuer Kontakt
New-Mailcontact -Name $UserName -ExternalEmailAddress $ExternalAddress -OrganizationalUnit $OU
# Kontakteigenschaften aendern:
# E-Mail-Adressrichtlinie fuer den Kontakt deaktivieren
Set-MailContact -EmailAddressPolicyEnabled $false -Identity $UserName
}

Um zu zeigen, dass auch gleichzeitig die Kontakteigenschaften verändert werden können, ist in der Schleife noch das Cmdlet „Set-MailContact“ eingebaut worden.

Fazit

Das Microsoft Script Center ist ein ausgezeichneter Ressourcenpool zur Entwicklung eigener Skripte. Wenn gerade mal kein passendes Skript veröffentlicht wurde, kann doch sehr schnell eine Idee für das eigene Projekt entwickelt werden. So wie am Beispiel eines Massenimports von externen E-Mail-Kontaktadressen in Active Directory und Exchange Server 2010 mit PowerShell.

Artikelfiles und Artikellinks

(ID:32148800)