Skip to main content

Posts

Power-Shelling the Message Tracking logs on Exchange 2000/2003

If you’ve ever had to write any scripts that query the message tracking logs though WMI you may have come across the issue that WQL cant handle doing a Where clause on an array. Because the Recipient address’s on an email are returned as an array when you want to use this class to make a query that only shows mail that is going to one address it can be a little cumbersome. With Powershell although you are still stuck not being able to filter via recipient address in a WMI query what you can do now is pipe that result to the where-object cmdlet where you can then filter the result to one particular recipient address. If you combine this in a script what you can then do is query the tracking logs for the past x number of hours to show any email sent to a particular recipient. The reverse is also true you can query to see all the email sent from a particular address. What I’ve done is put two scripts together that do this both scripts take 3 input parameters the first is the name of the s...

Company Instant Message RSS feed Notice Board LCS response Bot using communicator Web Access (Ajax)

Company announcement notice boards are something I’ve done a bit in the past usually these are web based the last one I did a while ago used a simple Exchange Event sink to create a simple web based notice board where information about company events could be posted to a mailbox and appear on the web page. They are also useful for posting things like network outages or as a change control list. With new technology comes new ways of doing things and seeing how I had the code for creating a LCS bot and a RSS feed it seemed natural to join them together and basically have a LCS bot that creates and RSS feed based on Instant message you send to it. The bot part of this code work’s as per my pervious post the RSS feed part creates a simple RSS document using the MICROSOFT.XMLDOM object. Because you can’t specify a subject and body in IM there’s some code that looks for any carriage returns in the Instant message and if it finds a carriage return it takes the first section as the title for ...

Change the Journal Recipient for an Exchange Store with CDOEXM via a Script

I’ve been asked the above question a few times by different people and although there is nothing in the Exchange SDK about this someone pointed me to an the following KB article that shows how to do this in C++. This being a little unfriendly for us mere mortals I put the following script together to hopefully make things a little easier. To reduce the need to go in to ADSI edit and get the DN name of the store object and the user object you want to switch journaling to I put some ADSI queries that will find the store in Active directory based on the stores friendly name (display name in ESM) and the another query that will find the user based on there logon name (samaccountname). The script to change the journal recipient is pretty basic it uses the iMailboxStoreDB interface to change the msExchMessageJournalRecipient Active directory property via the field’s property. Although you could probably do this directly via ADSI it’s probably advisable to stick to CDOEXM. The one thing to n...

Finding and Removing Empty Distribution Lists/Groups via a script

Somebody asked about this one last week while there are some valid reasons for having empty distribution lists usually they are things that can stick around because no-one's quite sure if they should be deleted. Writing a script to find and delete empty distribution lists is not too hard although I have put a bunch of safeguards in this script to stop you deleting any groups that you may not want to. Note this script doesn’t differentiate between a distribution group and a security group it just looks for any groups that are mail enabled that have no members. The script first does a search of AD for all mail enabled groups in active directory. It then connects to each group and starts going though its members. If there are more the 10 users in the group it stops counting. This wasn’t really a script to document the members in groups as this can get quite complicated when you consider nesting groups. If you’re after such a script Richard Muller has already written a great script to ...

Exchange Where is scripted Instant Message response Bot using LCS and Communicator Web Access (Ajax)

In my pervious post I showed how to create a simple LCS scripted response bot that did something a little bit boring such as tell you what day it is. Presence technology is something that’s changing and growing all the time the Outlook integration of the Office 2005 communicator is one example. The script is partially inspired by this but I decided to see if I could push the limits when it comes to privacy and the presence type information that is available to system administrators that you may not think normally about using. So what does this bot do ? The bot allows you to ask it the question where is fred@domain.com. It then takes this information and does the following First it queries the calendar to see if they are currently in an appointment and creates a response that shows details of the appointment a person may currently be attending and the location that appointment is and what time it started and finished. It also sends a full list of their calendar appointments over the ne...

Simple scripted Instant Message response Bot using LCS and Communicator Web Access (Ajax)

Continuing on from the other week I’ve been playing around further with the new Ajax interface for LCS communicator web access. Response bots are not only a lot of fun to play around with but can be a practical way of getting a little bit more out of an Instant messaging system. Like the send message script this script works by using the browser object to post and get data to the LCS Communicator Web Access server. The script is a little crude in some aspects for some reason the XML returned from LCS does seem to parse well so I’ve used a cruder text parse method to interpret the server responses. I have really only tested this in one environment so this logic may fall down in other environments where there are some differing variables. The first section of the script logs on to the web access server using NTLM over https and most importantly retrieves the latestupdate id which must be posted with every request to the server. The reasons why you need to do this and how the timeouts wor...

Removing Disabled Users from Distribution lists via a script

One thing that I seem to do with monotonous regularity is disable user accounts as people churn though the companies that I work for. Usually once an account is disabled the chances of it being re-enabled while possible are always slim. One of the things that mostly gets forgotten when disabling an account is to also remove it from any distribution lists that account maybe in. Now with the new hot-fix this is not as much of a problem because a disabled mailbox can now be configured to still receive email. However it is still desirable for these disabled accounts not to be receiving email from distribution lists. Instead of going though each disabled user to work out if it’s a member of any distribution list and then remove it I decided to create a script that would fist let me list all the disable users that are in a distribution lists and also have an option so it will remove these users from that group. For the script itself I’ve used ADSI and the ADO data shaping provider again. As ...
All sample scripts and source code is provided by for illustrative purposes only. All examples are untested in different environments and therefore, I cannot guarantee or imply reliability, serviceability, or function of these programs.

All code contained herein is provided to you "AS IS" without any warranties of any kind. The implied warranties of non-infringement, merchantability and fitness for a particular purpose are expressly disclaimed.