Share via


A simple script to manage UNIX related attributes in Windows 2003 R2

Migrating an existing environment running on Services for UNIX 3.5 to Windows 2003 R2 or above is very common these days. Generally we need to copy the values of the attributes for SFU 3.5 to the new attributes. In one of my earlier post I mentioned the difference in names of the attributes that has been introduced starting form Windows 2003 R2.

A simple way to copy the attributes can be achieved as shown below:

 

on error resume next

Const ADS_SCOPE_SUBTREE = 2

Const ADS_PROPERTY_CLEAR = 1

Const ADS_PROPERTY_UPDATE = 2

dim samname,uidnumber

samname= InputBox("Enter SAMAccountName :")

Set objConnection = CreateObject("ADODB.Connection")

Set objCommand = CreateObject("ADODB.Command")

objConnection.Provider = "ADsDSOObject"

objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection

objCommand.CommandText = "Select distinguishedname from 'LDAP://DC=xxx,DC=xxx' " & "where objectCategory='person' and objectclass='user' and samaccountname='" & samname & "'"

objCommand.Properties("Page Size") = 1000

objCommand.Properties("Timeout") = 30

objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.Properties("Cache Results") = False

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

            strUserDN = objRecordSet.Fields("distinguishedname").Value

            set objuser = GetObject("LDAP://" & strUserDN & "")

            uidNumber = ""

            uidNumber = objuser.Get("msSFU30UidNumber")

            objUser.Put "uidNumber", uidNumber

            objuser.setinfo

            gidNumber = ""

            gidNumber = objuser.Get("msSFU30GidNumber")

            objUser.Put "gidNumber", gidNumber

            objuser.setinfo

            gecos = ""

            gecos = objuser.Get("msSFU30Gecos")

            objUser.Put "gecos", gecos

            objuser.setinfo

       unixHomeDirectory = ""

            unixHomeDirectory = objuser.Get("msSFU30HomeDirectory")

            objUser.Put "unixHomeDirectory", unixHomeDirectory

            objuser.setinfo

            loginShell = ""

            loginShell = objuser.Get("msSFU30LoginShell")

            objUser.Put "loginShell", loginShell

            objuser.setinfo

            msSFU30Name = ""

            msSFU30Name = objuser.Get("msSFU30Name")

            msSFU30Name = InputBox("Please Enter the value for the msSFU30Name value","",msSFU30Name)

            objUser.Put "msSFU30Name", msSFU30Name

            objuser.setinfo

            objuser.setinfo

            set objuser = nothing

objRecordSet.MoveNext

Loop

May be introducing some error checking to validate the information before copying into new attribute will make this script more effective; but I leave that to you J