Scripting Exchange Server

For ‘ad hoc’ scripting of Exchange Server, you just cannot beat Dmitry Streblechenko’s Outlook Redemption.

It is basically a set of COM objects (in a DLL) which wrap many of the Outlook / Exchange objects, saving you from having to put some C++ code together to get around the horrible ‘Another application is trying to access Outlook’ security messages (and requiring user interaction).

I had a quick ‘squiz’ at Dimitry’s site and saw the ‘SafXXXXItem’ objects. I didn’t think these would meet my needs so almost wrote my own wrapper for the 2 or 3 particular objects / calls I needed, when I spotted his Redemption Data Objects (RDO), giving full access to the GAL, Public Folders, Mailboxes etc. In the end it did everything I needed and I got my script running in no time (see functions below).

Function AddUserToFolder(byref oFolder, byval oUserID, byval oUserName, byref objSession)

        ‘ oFolder                    Public Folder object
        ‘ oUserID                    EntryID of the user (from the GAL)
        ‘ oUserName                Name of the user (from the GAL)
        ‘ objSession                Session object
Dim sTempUsername
sTempUsername = “”
Set objACL = CreateObject(“MSExchange.aclobject”)
objACL.CDOItem = oFolder
Set objFolderACEs = objACL.ACEs

‘ delete the user if they exist already
For each objFolderACE in objFolderACes
sTempUsername = GetACLEntryName(objSession, objFolderACE.ID)
if sTempUsername = oUserName then
Log “Deleting User : ” & sTempUsername
objFolderACEs.Delete objFolderACE.ID
end if

‘ add user if they did not exist
Log “Adding user : ” & oUserName
Set objNewACE = CreateObject(“MSExchange.ACE”)
objNewACE.ID = oUserID
objNewACE.Rights = “&H7FB”
objFolderACEs.Add objNewACE

if err then
AddUserToFolder = false
AddUserToFolder = true
end if

Set objACL = nothing
Set objNewACE = nothing
Set objFolderACEs = nothing

End Function

Function GetACLEntryName(byref objSession, byval oACLEntryID)

        ‘ objSession                Session object
        ‘ oACLEntryID              EntryID from the folders’ ACL
Dim sResult
sResult = “”
Select Case oACLEntryId
Case UDefault
sResult = “Default” & vbTAB & “Default”
Case UAnonymous
sResult = “Anonymous” & vbTAB & “Anonymous”
Case Else
sResult = objSession.GetAddressEntryFromID(oACLEntryID).Name

End Select
GetACLEntryName = sResult

End Function


Tools for every machine.

There are some tools I find myself adding to every machine I work on. Some of these come from Scott Hanselmans’ Ultimate Tools List. Currently I install the following on every machine :-

I also use a bunch of others (Cropper, Magnifixer, Snippet Compiler etc), but the first list is my ‘MUST HAVES’ on every machine. To make it all a bit easier I put together a short script to copy the apps over to the new machine, install all the apps, do the necessary with reg entries etc. Code is as follows :-

Dim objFS, WshShell, link, bDebug, sDestinationFolder

bDebug = false
sDestinationFolder = “C:WindowsKensTools”

Set objFS = CreateObject(“Scripting.FileSystemObject”)
Set WshShell = CreateObject(“WScript.Shell”)

‘ Create the new folders (dont care about errors)
On Error Resume Next
objFS.CreateFolder sDestinationFolder

‘ Copy the files over
objFS.CopyFolder “.*.*”, sDestinationFolder, true
If Err then
Log (“Failed to copy folder over:” & vbcrlf & vbCrlF & err.description)
if bDebug then Log “Copied folder over”
End If

objFS.CopyFile “.*.*”, sDestinationFolder, true
If Err then
Log (“Failed to copy files over:” & vbcrlf & vbCrlF & err.description)
if bDebug then Log “Copied files over”
End If

‘ Do the apps
InstallApp “regedit.exe /s ” & sDestinationFolder & “Notepad2n2_shell_integration.reg”, “Notepad2”
InstallApp “msiexec /i “”” & sDestinationFolder & “CmdHere Powertoy For Windows XP.msi”””, “CmdHere Powertoy”
InstallApp sDestinationFolder & “VNC-4_1_1-x86_Win32.exe”, “VNC”
InstallApp sDestinationFolder & “Winzip90.exe”, “Winzip”
InstallApp “msiexec /i ” & sDestinationFolder & “CommandBarSetup.msi”, “CommandBar for Explorer”

‘ Create the BG Info shortcut
Set link = WshShell.CreateShortcut(“C:Documents and SettingsAll UsersStart MenuProgramsStartupBGinfo.lnk”)
link.Arguments = sDestinationFolder & “kens_default.bgi /TIMER:3”
link.Description = “BGinfo”
link.TargetPath = sDestinationFolder & “BGInfo.exe”
link.HotKey = “CTRL+ALT+SHIFT+B”
link.IconLocation = sDestinationFolder & “BGInfo.exe,1”
link.WindowStyle = 1
link.WorkingDirectory = sDestinationFolder
If Err then
Log (“Failed to install BGinfo shortcut:” & vbcrlf & vbCrlF & err.description)
if bDebug then Log “Installed BGinfo shortcut”
End If

Set link = nothing
Set WshShell = nothing
Set objFS = nothing

Sub InstallApp(byval cmdLine, byval appName)

Set oShell = CreateObject(“WScript.Shell”)
Set oExec = oShell.Exec(cmdLine)

Do While oExec.Status = 0
WScript.Sleep 100
If Err then
Log (“Failed to install ” & appName & ” :” & vbcrlf & vbCrlF & err.description)
if bDebug then Log (“Installed ” & appName)
End If

Set oExec = nothing
Set oShell = nothing

end Sub

Sub Log(byval Message)

Wscript.echo Message

End Sub


Helpdesk Application

I have been working in Support / Technical Services for many years now and have seen my fair share of CRM / Helpdesk Applications. These vary from the big guys Seibel, Remedy, HEAT all the way to free PHP scripts with a messy web front end.

One I’ve seen recently is Kayako’s SupportSuite. This is a web (PHP) based front end with a mySQL back end. It is incredibly feature rich, covering just about ALL of the needs of a typical ISV type company. It is certainly not one of those boxy, bordered table basic HTML front ends either, it actually looks really cool.

Some of the features I’ve explored so far include :-

  • Multiple SLA’s depending on customer
  • Good choice of integrated login scenrios (LDAP, vBulletin and many others)
  • Intelligent email parser
  • Customizable workflow
  • Excellent customer facing front end so they can view / edit their cases

  • Good knowledgebase, with internal and external articles and an option to auto suggest relevant articles
  • Integrates with Outlook
  • RSS’able absolutely everywhere (tickets, knowledgebase, news etc) 
  • Add ons for instant desktop alerts and for live support (web IM)

The only things that I can see that lets this gem down are :-

  • A lack of decent support, so far I’ve had a couple of poor answers to one good one and the response times can be lengthy.
  • A lack of decent documentation, their docs are so far behind the code it’s untrue – that said it is very intuitive

These guys really could clean up with this, I can see how I could have easily used this (and improved productivity) at all the companies I’ve worked for. It’s a real shame about the support and docs, it just makes it that much harder to implement, extend and operate. Does a busy support department really have the luxury to wait a day or two for support on their issues.

Although you get 98% of the source code when you purchase (a snip at $500 USD) the ‘owned’ version (I guess the 2% is their licensing code), how cool would it be to take a ‘Integration / Customization guide’, work through it and end up with a neat product streamlined to your business processes and systems – not going to happen right now with no docs, instead you’d have to pick through the PHP code by hand

I love this application, come on guys, you’ve got most of the NEEDED features in there already, get the docs and support sorted out, you could clean up !!


Archive One – Policy 4.2 Released !!!

The much awaited version 4.2 of Archive One Policy (from C2C Systems, my employer) is now available. You can find details here.

The aspect I’m excited about is the Integration Framework (see here for the announcement). This opens up a whole new arena for us – we can be both subservient to other systems; and take control of other systems. We’re using open file formats and hooks for any of the common scripting languages.

I’m looking forward to developing a bunch of useful scriptlets to make (archiving) life easier.


Samsung D600 review

I have just changed my mobile phone to the new Samsung D600 (perviously I had always used Nokia models). The Samsung phone is pretty good, it provides me with a 2 mega pixel camera, micro SD slot (which I filled with a 512MB card, so now my phone are over 600MB of storage available), MPEG4 capability, 240 by 320 262K colour screen and Picsel Viewer software (read Word, Excel, PDF and html docs).

I like the phone, but the software is a bit clunky, sending an SMS to someone in the phonebook is a lot of steps – after composing the message I have to hit :-

  • Options
  • Send Only
  • Options
  • Phonebook
  • Then ‘browse’ to the contact
  • OK (to check the checkbox for the contact)
  • Select
  • Options
  • Send
This is just to long. I use txt message to send very short snippets when I don’t want to disturb the receipent, having to go through this rigmarole is going to stop me using txt messaging.

Another feature I like is being able to configure the USB connection as ‘Mass Storage’ making the phone look like a removeable drive to my PC. However there seems to be a issue with this option in that it always reverts back to ‘Modem’ when I switch the phone off.

Final dissapointment is the lack of open standards / information about the thing. On the display settings I can choose what theme to apply – there is a choice of 2, imaginatively named Pattern 1 and Pattern 2 and the other setting is where I want to display the operator logo (top, bottom or off). I have to ask, ‘Why is there no option to modify these or to add your own themes ?’ – a little bit of thought on this side would have bumped the phone up from ‘good’ to ‘killer’ – I already have a USB connection, just publish the format / schema or whatever and let me get creative…