12 de julho de 2007

Aventuras com VBScript (e PrimalScript)

Embora o PowerShell seja cada vez mais o "standard de facto" para scripting relacionado com o Exchange Server, eu continuo ainda a utilizar o VBScript para algumas tarefas do dia-a-dia.

Recentemente, necessitei de adicionar um novo Proxy Address a todos os utilizadores da Active Directory e torná-lo o endereço SMTP primário. Para tornar as coisas mais interessantes, desta vez em vez de utilizar um ficheiro de texto como input, resolvi utilizar uma folha de Excel.

O script utiliza 2 colunas, a primeira com o alias de e-mail (mailNickname) e a segunda com o novo endereço smtp. O script adiciona ainda uma terceira coluna com os valores "Found" e "Not Found".

Aqui está o código:

Const ADS_SCOPE_SUBTREE = 2
Const ADS_PROPERTY_UPDATE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\smtp_table.xls")
objExcel.Visible = True

i = 1

Do Until objExcel.Cells(i, 1).Value = ""
strName = objExcel.Cells(i,1)
objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://dc=virtual,dc=com' WHERE objectCategory='user' " & _
"AND mailNickname='" & strName & "'"
Set objRecordSet = objCommand.Execute

If objRecordset.RecordCount = 1 Then
objExcel.Cells(i,3) = "Found"
strDN = objRecordSet.Fields("distinguishedName").Value
Set objUser = GetObject("LDAP://" & strDN)
strMail = objExcel.Cells(i,2)

arrProxyAddresses = objUser.GetEx("proxyAddresses")
nArr = UBound(arrProxyAddresses)
For n=0 To nArr
If InStr(arrProxyAddresses(n), "SMTP:") Then
arrProxyAddresses(n) = "smtp:" & Mid(arrProxyAddresses(n), 6)
End If
Next

ReDim Preserve arrProxyAddresses(nArr + 1)
arrProxyAddresses(nArr+1) = "SMTP:" & strMail
objUser.PutEx ADS_PROPERTY_UPDATE, "proxyAddresses", arrProxyAddresses
objUser.Put "Mail", strMail
objUser.SetInfo
Else
objExcel.Cells(i,3) = "Not found"
End If

i = i + 1
objRecordset.Close
Loop

objConnection.Close

Pensei também que já era altura de me adaptar aos tempos modernos, pelo que tomei a decisão de abandonar de vez o Notepad e começar a utilizar uma ferramenta mais profissional para scripting. Escolhi o PrimalScript!


O PrimalScript tem tantas características úteis para o meu trabalho, que seria impossível enumerá-las todas neste post. Experimentem a versão de trial e julguem por vocês mesmos.


Sem comentários: