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
Ok, so this did not work as planned. I modified this a bit and was able to come up with a solution. Will update the script, but it won’t be as clean as I like it.
Ok, tested and working, let me know if you have any issues, and I’ll do my best to lead you in the right direction.