I think you will find you can substantially speed up these scripts by dumping the query
strFilter = "(&(mail=*)(objectCategory=person)(objectClass=user)" &_
"(msExchHomeServerName=*" & strArgs(3) & "))" 'Mail users search filter
and instead looking at values of the homeMDBBL attribute on the msExchPrivateMDB objects of the server in question.
The medial portion of the filter above (the msExchHomeServerName=*servername) can be quite slow unless you have enabled medial indexing on that specific attribute. You should seriously notice a difference in the two mechanisms of retrieving the user DNs with mailboxes on that server if you have busy DCs or a large domain.
The query you show would have to look at the very least at every object with a mail address as the mail attribute would most likely have the smallest number of objects of the indexed attributes in the query. Lots of contacts or mail enabled groups would add even more time to the query plus if you have lots of Exchange servers you have to weed out all but the one you are interested in. So you probably end up making AD touch as many objects as have mail addresses, hundreds, thousands, tens or hundreds of thousands, etc.
On the flip side, looking at the homemdbbl values on the private MDB objects shows you exactly who has mailboxes on that server and will only have to touch and return maybe 20 objects.
Another alternative is to create a normal (non-medial) index for msExchHomeServerName and use the full value of the name instead of doing a medial search. That still probably wouldn't be as fast as looking at the private mdb objects but I would have to test it to be sure.
joe