Consolidate Checkpoint file with Transaction Log files folder

We had an independent review of all our Exchange servers and the consultants came back and pointed out that our Checkpoint log location was different than our log files. They wanted us to put the Checkpoint file in the same folder. I did this in 2 parts.

1. Grab all storage groups that currently had different values.

get-storagegroup | ?{$_.systemFolderPath -ne $_.LogFolderPath} | select server, name, logfolderpath, systemfolderpath | export -path c:\Checkpoint.csv

BES 5.0 CAL Populator - via Send Keys script

We are bringing on a new client, who had their own BES environment. As part of the process, we are rolling over their 1000+ CALs into our existing BES 5.x environment. Unfortunately, RIM does not have a nice pretty way to repopulate this information, unless your situation is ideal; ours is not.

This leaves me with 2 alternatives. Hand type each CAL into our BES server, and click the + button. Since it's a web page and not a GUI like 4.x versions, this means type 6 characters, tab, 6 more, tab, 6 more, etc.. OUCH! Painful!!

WoW Wallpaper Grabber Version 2

This updated version of the code will pull down the latest image from WorldofWarcraft.com from either their Blizzard images or the new Fan Art section randomly.

Recent Updates to code:

  • July 9, 2010 - Added code to randomly pull from any image on page.
  • July 22, 2010 - Added code to check what images were available last time it checked the Blizzard images, then download the newest if one is available. No changes - randomly between all Blizz images.Removing code and placing into ZIP attachment. Code appears to be causing formatting issues on later pages.

Quckie - Get Windows Service Pack Level

We had a cluster issue with one of our Exchange 2007 CCR clusters. It didn't successfully failover when the virtual server quit responding. On this, we noticed that this server was still running Windows 2008 SP1.

This quick script exports all the windows versions and service packs for all current Exchange servers in your environment.

$servers = Get-ExchangeServer

$report = @()
foreach ($S in $servers) {
        $colItems = get-wmiobject -class "Win32_OperatingSystem" -namespace "root\CIMV2" -computername $s.Name
        $report += $colItems | select Caption, CSName,CSDVersion
}

Recurse DL Parents

I am working on a project to add members to a series of distribution lists. These lists are nested into various parent lists, sometimes 2-3 layers deep. It's never been updated, but almost all these distribution groups are Mail-enabled Global Security groups. Powershell really, really wants to work with Universal groups. You can't just convert the current DL to Universal, it's parent needs to be Universal also.

The following function recurses a DL's parents and converts them all to Universal DLs using Quest's Set-QADGroup.

function Find-ParentDL ($dl) {

New Author

A long time friend and co-worker has been working on a number of Exchange 2007/2010 projects here at the office. This week he asked if he could post to my site, in order to preserve and publish scripts and findings. So, without further ado, I introduce GBasden.

Quick DL Search - All DLs that a specific person can SEND To (AcceptMessagesOnlyFrom)

This uses the Powershell filter to limit the list of ALL DLs to only those locked down to individuals. It doesn't filter on lists that the client is a member of having permissions. I specifically was looking for mail enabled contacts having permissions on my DLs.

$AllDLs = Get-DistributionGroup -ResultSize unlimited -Filter {AcceptMessagesonlyFrom -like "*"}
$alldls | ?{$_.AcceptMessagesOnlyFrom -match "Woodford, Eric"} | select displayname

Returns the names of all DLs.

Create DLs from CSV

At my current employer, we are constantly bringing on new customers. As I detailed in my VBScript version, it's a fairly complex environment.

The attached Powershell script does the following:

  1. Read CSV file of distribution list properties. (Alias, displayname, email address, etc.)
  2. Check then create each new DL
  3. Populate secondary properties on each DL like, proxy addresses, Allowed Senders, Size limits, and members.

Import Remote IP Range into Exchange 2007 EDGE servers

We maintain an Exchange EDGE server on our perimeter as SMTP relay. Application servers can use this server to relay email out (to internal recipients or the Internet). To keep this server from being an open relay, we maintain a list of valid IP addresses that can relay through this server. To update the the relay, we run my script below to import the IPs. On our first attempt, we found that MS Edge 2007 - Receive Connectors have a limit on allowed RemoteIPRanges values. After approximately 1100 individual IPs, it would quit accepting any additional IP addresses. Unfortunately, we have over 1300 current application servers running currently.

Exchange 2007 Move-Mailbox Report

As we migrate our mailboxes over from Exchange 2003, to Exchange 2007, we've been asked numerous times for reports detailing the time/size of each mailbox moved. Lucky for us, Exchange does a wonderful job documenting the move (when you use move-mailbox to do so). Unfortunately for most humans, this data is in XML format. Readable, just not user friendly.

Hence, I created this nifty script, to read the XML files, then export a summary (in HTML and CSV format) of the moves. To get it running in your environment, you'll need to: