Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS - Kontakte im ADS anlegen

Frage Entwicklung VB for Applications

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

17.05.2007, aktualisiert 28.08.2007, 10616 Aufrufe, 13 Kommentare

Guten Mittag zusammen,

ich habe heute eine Textdatei bekommen, in der lauter Kontakte drin stehen die ich im Exchange - Globales Adressbuch veröffentlicht werden müssen. Bei den Kontaken handelt es sich um externe Adressen. Nun könnte ich per Hand anlegen, jedoch sind es ca. 200 Stück. Praktikannten haben wir leider im Moment keine da.

Wie kann ich nun per VBS Script einen Kontakt anlegen, die E-Mailadresse als Hauptadresse markieren und Vor- & Nachnamen angeben. In welche OU die Kontakte erstellt werden sollen, soll vorher abgefragt werden.

Aufbau einer Textdatei ist sicher auch von nöten:
01.
müller tab christoph tab ch.mueller@seinedomain.de 
02.
....
System: Windows 2003 EE + Exchange 2003 EE => ServicePack 2
Im vorraus vielen Dank & und einen schönen Männertag!
Update:
17.05.2007 12:09 Uhr
Also jetzt habe ich nach Stunden doch noch ein kl. VBScript gefunden:
01.
Set ou = GetObject("LDAP://ou=Benutzer,dc=firma,dc=de") 
02.
 
03.
Set mailcontact = ou.Create("contact", "cn=Mail-Contact") 
04.
mailContact.mailNickName = "pfoeckeler-extern" 
05.
mailContact.displayName = "Föckeler, Philipp (Extern)" 
06.
mailContact.targetAddress = "philipp.foeckeler@cerrotorre.de" 
07.
mailcontact.SetInfo
Der Kontakt wird erzeugt. Jedoch wird nicht die angegebene E-Mailadresse genommen. Es wurde ein Exchange - Postfach angelegt mit der Exchange-Domäne.


Gruß
Dani
Mitglied: bastla
17.05.2007 um 12:15 Uhr
Hallo Dani!

Vielleicht kannst Du damit etwas anfangen:
http://www.msxfaq.net/code/makecontact.htm
Create a Contact in Active Directory

Grüße
bastla

[Edit] @Dani: Sorry, hatte Dein Edit noch nicht gesehen ... [/Edit]
Bitte warten ..
Mitglied: Dani
17.05.2007 um 12:27 Uhr
Hallo bastla!

Vielen Dank für die Links. Den 1. Link kenne ich schon, hat mir aber nichts gebracht. Den Inhalt vom 2. Link ist gleich wie mein Update. Dank dir trotzdemm...noch ne Idee??
Hier habe ich ein Link gefunden, aber der Code ist einfach zu hoch für mich:
http://www.msexchange.org/articles/Migrating-Contacts-Distribution-List ...


Gruß
Dani
Bitte warten ..
Mitglied: bastla
17.05.2007 um 12:29 Uhr
Nachtrag:

Auffällig ist, dass in dem Beispiel bei dem ersten von mir angeführten Link ein Objekt " ;user", nicht " ;contact", erstellt wird. Allerdings habe ich keine Ahnung, ob das hier weiterhilft ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
17.05.2007 um 13:42 Uhr
Hi!
Ne....leider nicht. Also ich hab's fast fertig. Ich brauche legendlich noch das Kommando, um unter "E-Mail Adressen" der Kontakteigenschaft die E-Mailadresse hinzuzufügen und als "Hauptadresse zu setzen.

Wie stelle ich es am Besten mit dem Auslesen der einzelnen Daten?? Datei öffen ist kein Thema, aber das auftrennen nach dem TAB macht mir Probleme. Funktioniert das auch mit der split Funktion?!


Gruß
Dani
Bitte warten ..
Mitglied: bastla
17.05.2007 um 13:55 Uhr
Hallo Dani!

Ohne verfügbaren Exchange-Server bin ich leider Trockenschwimmer und damit keine wirkliche Hilfe ...

Was das Aufteilen angeht:
01.
C = Split(Zeile, vbTab) 
sollte gehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
17.05.2007 um 14:03 Uhr
Hallo bastla!
Danke...aber eben hat sich etwas neues ergeben. Und zwar wurde aus der Textdatei eine Exceltabelle. Sprich ich müsste nur noch die Zellen einer jedener Zeile auslesen. Jedoch habe ich das mit VBScript noch nie gemacht.

Aufbau Exceltabelle:
vorname |nachname | e-mailadresse | beschreibung


Gruß & ein fettes Danke
Dani
Bitte warten ..
Mitglied: bastla
17.05.2007 um 14:23 Uhr
Hallo Dani!

Die unsportliche Variante (vor allem, wenn es ein einmaliger Vorgang sein sollte) wäre ein Speichern der Excel-Datei als ".csv", aber an einem Feiertag darf's schon auch einmal ein Script sein:
01.
Set XL = WScript.CreateObject("Excel.Application") 
02.
XL.Workbooks.Open "D:\Kontaktdaten.xls" 
03.
i = 1 'Zeilennummer der ersten Datenzeile 
04.
Do While XL.Worksheets(1).Cells(i,1).Value <> "" 
05.
	Vorname = XL.Worksheets(1).Cells(i,1).Value 
06.
	Zuname = XL.Worksheets(1).Cells(i,2).Value 
07.
	email = XL.Worksheets(1).Cells(i,3).Value 
08.
	Beschr = XL.Worksheets(1).Cells(i,4).Value 
09.
 
10.
	WScript.Echo Vorname & ", " & Zuname & ", " & email & ", " & Beschr 
11.
 
12.
	i = i + 1 
13.
Loop 
14.
XL.ActiveWorkbook.Saved = True 
15.
XL.Application.Quit
Die "WScript.Echo"-Zeile dient natürlich nur der Demonstration - im Prinzip kannst Du dort gleich das Erstellen des Kontaktes durchführen.

Grüße
bastla

[Edit] Natürlich würde es mit einem "With XL.Worksheets(1)"-Block schöner aussehen, aber man muss es ja nicht gleich übertreiben ... [/Edit]
Bitte warten ..
Mitglied: Dani
17.05.2007 um 14:33 Uhr
Dank dir nochmal! Ja ich weiß, aber es kommt von oben runter. Vielleicht kennst du das Spiel.
So einfach kann es manchmal sein....Funktioniert so einwandfrei. Wenn das Script fertig ist, poste ich es natürlich gerne!


Gruß
Dani
Bitte warten ..
Mitglied: bastla
17.05.2007 um 14:44 Uhr
Hallo Dani!

Noch eine Idee zum Eintragen der Mailadresse (aus dem etwas längeren Code bei http://www.msexchange.org/articles/Migrating-Contacts-Distribution-List ... abgeleitet):
Anstelle der Zeile mailContact.targetAddress = "philipp.foeckeler@cerrotorre.de" Deines Beispieles oben könntest Du noch
01.
Set objRecip = mailContact 
02.
objRecip.MailEnable "SMTP:" & "philipp.foeckeler@cerrotorre.de"
versuchen.

Grüße
bastla
Bitte warten ..
Mitglied: Dani
17.05.2007 um 15:13 Uhr
So,
also bastla das war ein Volltreffer! Einfach genial von dir...Ich habe das Script auch schon durchsucht, aber nichts gefunden. So, jetzt hab ich auch Feierabend... Also Danke nochmal & einen schönen Vater-Tag (Männertag).
Das Script folgt Heute oder Morgen (versprochen)!! *gg*


Gruß
Dani
Bitte warten ..
Mitglied: Dani
17.05.2007 um 15:48 Uhr
Jetzt habe ich noch eine kl. Zusatzaufgabe: Wenn nun ein Kontakt schon exstiert, bricht das Script automatisch ab und zeigt mir eine Meldung. Wie kann ich das am Besten realisieren, dass er dann den Datensatz überspringt und den nächsten macht?


Gruß
Dani
Bitte warten ..
Mitglied: bastla
17.05.2007 um 16:05 Uhr
Hallo Dani!

Könnte so gehen: Nach dem Einlesen der Zeile aus Excel (und nach dem Set ou=...)
01.
emailExists = False 
02.
For Each adcontact In ou 
03.
	If LCase(CStr(adcontact.mail)) = LCase(CStr(email)) Then 
04.
		emailExists = True 
05.
		Exit For 
06.
	End If 
07.
Next 
08.
If Not emailExists Then 
09.
	'anlegen: Set mailcontact = ou.Create(... 
10.
	 
11.
End If
Grüße
bastla
Bitte warten ..
Mitglied: Dani
17.05.2007 um 17:22 Uhr
Hi bastla!
So, jetzt klappts ohne Probleme! Vielen Dank....Wie versprochen, hier die Version 0.4:
01.
'Allgemeine Informationen / Hinweise / ChangeLog 
02.
'########################################################################## 
03.
'Autor:	Dani 
04.
'Aufagbe:	Aus einer Exceltabelle im Exchange externe Kontakt erstellen 
05.
06.
'Version: 
07.
'0.1 - Namensgebung einheitlich dargestellt 
08.
'0.2 - Dialogbox zur Abfrage der Exceltabelle eingebaut 
09.
'0.3 - Überprüft, ob Kontakt schon vorhanden ist 
10.
'0.4 - In der Abfrage, ob die E-Mailadresse schon AD vorhanden ist, war 
11.
'      die Abfrage falsch. 
12.
13.
14.
'Variablen 
15.
'########################################################################## 
16.
Dim objobjExcel, objOpenDialog, objOU, objContact, objRecip 
17.
Dim strVorname, strNachname, strEmail, strDesc 
18.
19.
20.
' Dialogbox - Auswahl der Exceltabelle, die eingelesen werden soll 
21.
'########################################################################## 
22.
do 
23.
Set objOpenDialog = CreateObject("SAFRCFileDlg.FileOpen") 
24.
intReturn = objOpenDialog.OpenFileOpenDlg 
25.
26.
If intReturn Then 
27.
28.
Else 
29.
WScript.Echo "Script wird beendet!" 
30.
WScript.Quit 
31.
End If 
32.
Loop While objOpenDialog.FileName = ""  
33.
34.
35.
'Die entsprechende Datei wird geöffent 
36.
'########################################################################## 
37.
Set objExcel = WScript.CreateObject("Excel.Application") 
38.
objExcel.Workbooks.Open objOpenDialog.FileName 
39.
40.
'Zeilennummer der ersten Datenzeile 
41.
i = 2  
42.
Do While objExcel.Worksheets(1).Cells(i,3).Value <> "" 
43.
strVorname 	= objExcel.Worksheets(1).Cells(i,1).Value 
44.
strNachname = objExcel.Worksheets(1).Cells(i,2).Value 
45.
strEmail 	= objExcel.Worksheets(1).Cells(i,3).Value 
46.
strDesc 	= objExcel.Worksheets(1).Cells(i,4).Value 
47.
'	 
48.
'	 
49.
' Organisationseinheit, in der ide Kontake erzeugt werden sollen 
50.
Set objOu = GetObject("LDAP://ou=Kontakte,dc=familie-wydler,dc=local") 
51.
	 
52.
 
53.
'Überprüfen, ob eine Kontakt schon vorhanden ist und setzt dem entsprechend die Variable 
54.
' True - E-Mailadresse existiert bereits 
55.
' False - E-Mailadresse nicht vorhanden 
56.
emailExists = False 
57.
For Each adcontact In objOu 
58.
If LCase(CStr(adcontact.targetAddress)) = LCase(CStr("SMTP:"& strEmail)) Then 
59.
emailExists = True 
60.
Exit For 
61.
End If 
62.
Next 
63.
64.
'Erzeugt die einzelnen Kontakte 
65.
If Not emailExists Then 
66.
'	 
67.
'Erzeugt die einzelnen Kontakte 
68.
Set objContact = objOu.Create("contact", "cn="& strVorname &" "& strNachname)	 
69.
objContact.mailNickName = strVorname &" "& strNachname 
70.
objContact.displayName = strVorname &" "& strNachname 
71.
objContact.targetAddress = strEmail 
72.
objContact.givenName = strVorname  
73.
objContact.sn = strNachname  
74.
75.
'Setzt nur die Beschreibung, wenn das Excelfeld nicht leer ist 
76.
If strDesc <> "" Then 
77.
objContact.description= strDesc 
78.
End If 
79.
'	 
80.
'Hinterlegt im Reiter "E-Mail Adressen" der Benutzereigenschaften die E-Mailadresse 
81.
Set objRecip = objContact 
82.
objRecip.MailEnable "SMTP:" & strEmail 
83.
84.
objContact.SetInfo 
85.
Else 
86.
WScript.echo "Doppelter Kontakt - "& strVorname &", "& strNachname &"!" 
87.
End If 
88.
'	 
89.
'Nächste Excelzeile 
90.
i = i + 1 
91.
Loop 
92.
93.
'Setzt das "gespeichert" - Flag. Somit entfällt die Abfrage beim Beenden 
94.
objExcel.ActiveWorkbook.Saved = True 
95.
96.
'Exceltabelle schließen / beenden 
97.
objExcel.Application.Quit 
98.
99.
100.
'Script beenden 
101.
'########################################################################## 
102.
WScript.Echo "Kontakte erfolgreich angelegt!" 
103.
WScript.Quit
Bei Fehler bitte ich euch, sag mir Bescheid! Danke...


Gruß
Dani
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Batch & Shell
Printerport mit Powershell anlegen (12)

Frage von Druide83 zum Thema Batch & Shell ...

Batch & Shell
gelöst Recursiv Unterordner anlegen Powershell (2)

Frage von Voiper zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...