Scripts for populating users via OU

Here is a modified LCSAddContacts.wsf
Please copy and paste the following and renamed it as LCSAddContacts.wsf

<?xml version="1.0"?>

LCSAddContacts.wsf
This WMI script progmatically adds Contacts for LCS Users.

<?job error="True" debug="True" ?>

Example:
CScript LCSAddContacts.wsf /usersfile:users.txt /contactsfile:contacts.txt /contactsgroup:supportstaff
CScript LCSAddContacts.wsf /usersfile:users.txt /contactsfile:contacts.txt /delete

vbEmpty Then
WScript.Echo "[Err] " & Err.number & ": " & Err.Description & ", Could not connect to " & strOU
On Error Goto 0
Else
On Error Goto 0
' apply a filter to retrieve only objects of class User
objContainer.Filter = Array("User")
' iterate all members within the Container
For Each objMember In objContainer
If Trim(vReturn(0)) <> "" Then
ReDim Preserve vReturn(UBound(vReturn) + 1)
End If
On Error Resume Next
vReturn(UBound(vReturn)) = objMember.Get("msRTCSIP-PrimaryUserAddress")
On Error Goto 0
Next
End If
GetUsersInContainer = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: GetUserInstanceID
' Description: This function will return the InstanceID of SIP User
' Parameters: ByVal strPrimaryURI - SIP address of User
' whoes InstanceID has to be retrived
' Returns: Variant string - (either -1 or InstanceID of SIP User)
'-------------------------------------------------------------------------------
Function GetUserInstanceID (ByVal strPrimaryURI)
Dim vReturn : vReturn = -1
If Not IsEmpty(strPrimaryURI) Then
Dim oUserInstances : Set oUserInstances = GetObject("winmgmts:\\" & cComputer).ExecQuery("SELECT * FROM " & cWMIUserClass & " WHERE PrimaryURI = '" & strPrimaryURI & "'")
If Not oUserInstances.Count < 1 Then
Dim oInstance
For Each oInstance In oUserInstances
vReturn = oInstance.InstanceID
Next
End If
End If
GetUserInstanceID = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: ParseUserLineItem
' Description: This function will parse each line item from text file
' with the users and add contacts for them.
' Parameters: ByVal strLineItem - Line item that has to be parsed
' for user for which contacts have to be added.
' Returns:
'-------------------------------------------------------------------------------
Function ParseUserLineItem (strLineItem)
Dim vItems : vItems = Split(strLineItem, ":")
If UBound(vItems) > 0 Then
Dim vUsers
Dim vUser
Select Case UCase(vItems(0))
Case "SIP"
vUser = "sip:" & Trim(vItems(1))
AddContacts(vUser)
Case "DN"
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@ Adding Contacts for users in " & vItems(1)
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@------------------------------------------------------------"
vUsers = GetUsersInContainer(Trim(vItems(1)))
For Each vUser In vUsers
AddContacts(vUser)
Next
Case Else
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "[Err] Invalid Line item in " & strUsersFile & ": '" & strLineItem & "'"
WScript.Echo "@------------------------------------------------------------"
End Select
Else
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "[Err] Invalid Line in " & strUsersFile & ": '" & strLineItem & "'"
WScript.Echo "@------------------------------------------------------------"
End If
End Function

'-------------------------------------------------------------------------------
' Function: ParseContactLineItem
' Description: This function will parse each line item from text file
' with the contact.
' Parameters: ByVal strLineItem - Line item that has to be parsed
' for contacact.
' Returns: Variant array of contact account for the specified DN
'-------------------------------------------------------------------------------
Function ParseContactLineItem (strLineItem)
Dim vItems : vItems = Split(strLineItem, ":")
Dim vReturn
ReDim vReturn(0)

If UBound(vItems) > 0 Then
Dim vUsers
Dim vUser
Select Case UCase(vItems(0))
Case "SIP"
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@ Adding Contacts " & vItems(1)
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@------------------------------------------------------------"
vUser = "sip:" & Trim(vItems(1))
vReturn(0)=vUser
Case "DN"
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@ Adding Contacts in " & vItems(1)
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@------------------------------------------------------------"

vUsers = GetUsersInContainer(Trim(vItems(1)))
For Each vUser In vUsers
If Trim(vReturn(0)) <> "" Then
ReDim Preserve vReturn(UBound(vReturn) + 1)
End If
vReturn(UBound(vReturn)) = vUser
Next
Case Else
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "[Err] Invalid Line item in " & strUsersFile & ": '" & strLineItem & "'"
WScript.Echo "@------------------------------------------------------------"
End Select
Else
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "[Err] Invalid Line in " & strUsersFile & ": '" & strLineItem & "'"
WScript.Echo "@------------------------------------------------------------"
End If
ParseContactLineItem = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: AddContacts
' Description: Add contacts for given User
' Parameters: ByVal strPrimaryURI - SIP address of User
' for whom contacts have to be added
' Returns:
'-------------------------------------------------------------------------------
Function AddContacts (ByVal strPrimaryURI)
If Not IsEmpty(strPrimaryURI) Then
Dim strUserInstanceId : strUserInstanceId = GetUserInstanceID(strPrimaryURI)
If Not IsNumeric(strUserInstanceId) Then
Dim strGroupID
Dim strContactLineItem
If Not IsNull(strContactGroup) Then
strGroupID = AddContactGroup(strUserInstanceId, strContactGroup)
End If
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "@ Adding contacts..."
WScript.Echo "@ PrimaryURI: " & strPrimaryURI
WScript.Echo "@ InstanceID: " & strUserInstanceId
WScript.Echo "@ ContactGroupID: " & strGroupID
WScript.Echo "@------------------------------------------------------------"
For Each strContactLineItem In vContacts
If Not (ParseAndAddContact(strUserInstanceId, strContactLineItem, strGroupID) = 0) Then
WScript.Echo "[Err] Invalid line in " & strContactsFile & ": '" & strContactLineItem & "'"
End If
Next
Else
WScript.Echo ""
WScript.Echo "@------------------------------------------------------------"
WScript.Echo "[Err] Invalid User(User might not be SIP enabled) in " & strUsersFile & ": '" & strPrimaryURI & "'"
WScript.Echo "@------------------------------------------------------------"
End If
End If
End Function

'-------------------------------------------------------------------------------
' Function: ParseAndAddContact
' Description: Parse line item and call AddContact() for given User
' Parameters: ByVal strUserInstanceId - InstanceID of User
' for whom contact has to be added
' ByVal strContactInfo - Line item with the Contact information
' ByVal strGroupID - GroupID of ContactGroup
' Returns: Variant rReturn - (Either -1, Err.Number or 0)
'-------------------------------------------------------------------------------
Function ParseAndAddContact(ByVal strUserInstanceId, ByVal strContactInfo, ByVal strGroupID)
Dim vReturn : vReturn = -1
Dim intPos : intPos = InStr(strContactInfo, "sip:")
If Not (intPos = 0) Then
Dim vContactItems : vContactItems = Split(strContactInfo, "sip:")
Dim intCount : intCount = UBound(vContactItems)

'Stronger version of trim to remove tabs etc.
Dim strName
Dim oRegExp : Set oRegExp = New RegExp
oRegExp.Pattern = "\s{2,}"
strName = Trim(oRegExp.Replace(vContactItems(0), ""))

If intCount = 1 Then
If Not fDelete Then
If Len(strName) = 0 Then ' if no name exists
vReturn = AddContact(strUserInstanceId, "sip:" & Trim(vContactItems(1)), strGroupID, null, true)
Else ' if name exists
vReturn = AddContact(strUserInstanceId, "sip:" & Trim(vContactItems(1)), strGroupID, strName, true)
End If
Else
vReturn = DeleteContact(strUserInstanceId, "SIP:" & Trim(vContactItems(1))) ' Notice SIP is in all caps
End If
End If
End If
ParseAndAddContact = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: AddContact
' Description: Adds Contact for given User
' Parameters: UserInstanceID, SIPURI, GroupID, Name, Subscribed
' Returns: Variant rReturn - (Either -1, Err.Number or 0)
'-------------------------------------------------------------------------------
Function AddContact(ByVal UserInstanceID, ByVal SIPURI, ByVal GroupID, ByVal Name, ByVal Subscribed)
Dim vReturn : vReturn = -1

Dim vGroupID : vGroupID = null
If Not IsNull(GroupID) And Not IsEmpty(GroupID) Then
Redim vGroupID(0)
vGroupID(0) = GroupID
End If

Dim oInstances
Dim oInstance

Set oInstances = GetObject("winmgmts:\\" & cComputer).Get(cWMIUserContactClass)
Set oInstance = oInstances.SpawnInstance_

oInstance.UserInstanceID = UserInstanceID
oInstance.SIPURI = SIPURI
oInstance.GroupID = vGroupID
oInstance.Name = Name
oInstance.Subscribed = Subscribed

On Error Resume Next
oInstance.Put_ 0 'Put flag 0 for createOrUpdate

If Err.number = vbEmpty Then
Wscript.Echo "[+] Put successful for contact: " & Name & " (" & SIPURI & ")"
vReturn = 0
Else
Wscript.Echo "[-] Put failed for contact: " & Name & " (" & SIPURI & ") " & Err.number & ": " & err.description
vReturn = Err.number
End If
On Error Goto 0
AddContact = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: DeleteContact
' Description: Deletes Contact for given a User
' Parameters: UserInstanceID, SIPURI
' Returns: Variant rReturn - (Either -1, Err.Number or 0)
'-------------------------------------------------------------------------------
Function DeleteContact(ByVal UserInstanceID, ByVal SIPURI)
Dim vReturn : vReturn = -1

Dim oInstances
Dim oInstance

Set oInstances = GetObject("winmgmts:\\" & cComputer).ExecQuery("SELECT * FROM " & cWMIUserContactClass & " WHERE UserInstanceID = '" & UserInstanceID & "'")
If Not oInstances.Count < 1 Then
For Each oInstance In oInstances
If StrComp(SIPURI, oInstance.SIPURI) = 0 Then
On Error Resume Next
oInstance.Delete_
If Err.number = vbEmpty Then
WScript.Echo "[+] Delete successful for contact: " & SIPURI
vReturn = 0
Else
WScript.Echo "[-] Delete failed for contact: " & SIPURI & " " & Err.number & ": " & Err.Description
vReturn = Err.number
End If
On Error Goto 0
End If
Next
End If
DeleteContact = vReturn
End Function

'-------------------------------------------------------------------------------
' Function: AddContactGroup
' Description: Adds Contact for given User
' Parameters: UserInstanceID, Name
' Returns: Variant rReturn - (Either null or GroupID)
'-------------------------------------------------------------------------------
Function AddContactGroup(ByVal UserInstanceID, ByVal Name)
Dim vReturn : vReturn = null

Dim oInstances
Dim oInstance

Set oInstances = GetObject("winmgmts:\\" & cComputer).Get(cWMIUserContactGroupClass)
Set oInstance = oInstances.SpawnInstance_

oInstance.UserInstanceID = UserInstanceID
oInstance.Name = Name

On Error Resume Next
oInstance.Put_ 2 'Put flag 2 for createOnly

Err.Clear
On Error Goto 0

Set oInstances = GetObject("winmgmts:\\" & cComputer).ExecQuery("SELECT * FROM " & cWMIUserContactGroupClass & " WHERE UserInstanceID = '" & UserInstanceID & "'")
If Not oInstances.Count < 1 Then
For Each oInstance In oInstances
If StrComp(Name, oInstance.Name) = 0 Then
vReturn = oInstance.GroupID
End If
Next
End If

AddContactGroup = vReturn
End Function

]]>

"" then
ReDim Preserve vContacts(i)
vContacts(i) = vLineContact
i = i+1
End If
Next
Loop
Else
fShowUsage = True
WScript.Echo "[Err] Invalid contacts input file: " & strContactsFile
End If

'Reading Users from file and adding contacts
If oFS.FileExists(strUsersFile) Then
If fContactsExist Then
Set oUsersFile = oFS.OpenTextFile(strUsersFile, 1, false)

Dim strUserSIPAddress
Dim strUserInstanceId
Dim strLineItem

Do Until oUsersFile.AtEndOfStream
strLineItem = Trim(oUsersFile.ReadLine)
ParseUserLineItem(strLineItem) ' Parse each line item and add contacts for it
Loop
End If
Else
fShowUsage = True
WScript.Echo "[Err] Invalid users input file: " & strUsersFile
End If

If fShowUsage Then
ShowUsage
End If

]]>

Copyright © 1996 Meni Milstein. No portion may be reproduced without my written permission. All registered trademarks or trademarks belong to their respective companies. Should any right be infringed, it is unintentional. Let us know and the matter will be rectified. All other contents that may be linked from this site, and or forum posts in this site are not under our immediate control and not our responsibility. We do our best to maintain all the Forums and editing them sometimes takes several days.