VBS Script to add Lync Contacts to all users who are a member of a Group
March 17, 2012 2 Comments
This is based off and extends the LyncAddContacts.vbs script found here: http://www.expta.com/2011/01/introducing-lyncaddcontacts.html
After much searching on the web I was unable to find a script to meet my needs with Lync, so I put this together and cleaned it up a bit. This of course requires the LyncAddContacts script with the dbimpexp.exe tool pulled from the Lync install DVD or iso. You will also need a template user (which can be created with a mailbox, account hidden from exchange addressbook, and account diabled after adding all the contacts and groups to the Lync). You will also need to run and probably schedule task this with an account that has all the permissions needed to pull export and import contacts for your lync users.
To use this script place in same directory as your other scripts on the Lync server and change the 3 const variables located near the top of the script. Enjoy
Update: I changed the script a little, turns out I should not use a @ symbol in a string so I replaced it with chr(64). Also another gottcha I ran into was that run in path needs to be your scripts folder with exe and both vbs scripts if you are using the task scheduler. Also this can be resource intensive as it updates all the users directly through SQL. So ether adjust your resources acordingly or only run this during early morning or late evenings.
'LyncAddContactGroups.vbs
'Script Used to import Contact Groups to all users in Lyncmplate
'Author: Paul Cardelli
'Date last Modified: 3/17/12
'-------------------------------------------------------------------------
Option Explicit
Dim objRootDSE, strDomain, objGroup, objUser, WShell, arrMemberOf, strMember, strSIPTemplate
strSIPTemplate = "LyncTemplateUser" & Chr(64) & "domain.com"
Const strGroupCN = "LDAP://CN=All Users,ou=User Groups,"
Const strLyncScriptPath = "d:\Scripts\"
Set WShell = WScript.CreateObject("Wscript.Shell")
WShell.Run "cscript " & strLyncScriptPath & "LyncAddContacts.vbs /backup backup.xml", 0, False
WShell.Run "cscript " & strLyncScriptPath & "LyncAddContacts.vbs " & strTemplateSIP, 0, False
' Retrieve domain information
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
Set objGroup = GetObject(strGroupCN & strDomain)
objGroup.GetInfo
arrMemberOf = objGroup.GetEx("member")
'Pull all e-mail Addresses into an array, and apply Template to each User
For Each strMember in arrMemberOf
Set objUser = GetObject("LDAP://" & strMember)
WShell.Run "cscript " & strLyncScriptPath & "LyncAddContacts.vbs /import " & objUser.mail, 0, False
Next
WScript.Quit