Save file as .PS1 extension and run from the Exchange Powershell.

Enter full path to execute script. Example: From Powershell Prompt> C:\AliasFix.ps1

# ================================================

#

# This script allows you to identify and modify users, contact and distributions lists

# that have invalid characters in the alis.

#

# Last Modified 05.03.07

# Author: matbyrd@microsoft.com

#

# ================================================

# Input Parameters

param ([string]$type = "",$resultsize = "Unlimited",[string]$search = " ",[string]$replace = "",$add = $null,[switch]$help=$false)

# Variables

[array]$baseobjects            # Array to hold all found objects

[string]$new                   # Value of the new alias

$choice                        # Used to determine choice in switch commands

$command                       # For holding the constructed command to execute

# Formating Variables

# Allows a Central place for defining the colors of script messages

[string]$info = "White"               # Color for informational messages

[string]$warning = "Yellow"    # Color for warning messages

[string]$error = "Red"         # Color for error messages

# ShowHelp Function (help about_function)

# ================================================

Function ShowHelp {

Write-host "This script will find objects of the specified type that contain a space in the alias"

Write-host "It will remove the space from the alias and update the object"

Write-host " "

Write-host "Both the search character and the replacement character can be changed using the advanced options"

Write-host "Advanced Options:" -foregroundcolor $warning

write-host " "

Write-host "-Type       : Used to specifiy the get- command that is run to find the objects (Mailbox,Distributiongroup,Mailcontact)"

write-host "-Resultsize : Used to specifiy a result size other than the default of `"Unlimited`""

write-host "-Search     : Used to specify the character / sting to search for"

write-host "-Replace    : Used to specify the replacement character"

write-host "-Add        : Used to provide the get- command with addtional switch options"

write-host "-Help       : Display this help message"

write-host " "

Write-host "Examples:" -foregroundcolor $info

write-host " "

Write-host "fix-alias.ps1 -type MailContact -Search `"@`" -Replace `"_`" -add `"-OrganizationalUnit ‘My Ou’`""

}

# Function to gather and modify the alias (help about_function)

# ================================================

Function FixObject {

# Use iex (invoke-expression) to execute the cmdlet in $command (help invoke-expresion)

# Place the output in the $baseobjects array

$baseobjects = iex $getcommand

# Loop thru all of the object in the $baseobjects array (help about_foreach)

# If the alias of the object contains the search character/characters operate on the object (help about_if)

# Otherwise Do Nothing

foreach ($value in $baseobjects) {

        if ($value.alias -like "*$search*")

               {

                       # Write out that we found an object to modify

                       # Use the string.replace .net method to search for and replace the character

                       # http://msdn2.microsoft.com/en-us/library/fk49wtc1(vs.90).aspx

                       # Write out the New Alias

                       # Construct the Set command into a variable and execute using iex

                       write-host "Found Object to Fix:" $value.alias -foregroundcolor $error

                       $new = $value.alias

                       $new = $new.replace($search,$replace)

                       write-host "New Alias of Object:" $new -foregroundcolor $info

                       write-host " "

                       $setcommand = "set-" + $type + " ‘" + $value.identity + "’ -alias $new"

                       iex $setcommand

               }

        else { }

}

}

# Main Body of Script

# ================================================

# Display help if -help specified (help about_if)

if ($help -eq $true)

        { ShowHelp;exit }

else { }

# Determine if $type is set by parameter (help about_if)

# Provide the user a list of choices if $type is not set

if ( $type.length -eq 0 )

        {

               # Provide user with choice of objects to check

               Write-host " "

               write-host "Please Choose what objects to search for"

               write-host " "

  
             write-host "1 – Mailbox"

               write-host "2 – Contacts"

               Write-host "3 – Distribution Group"

               # Capture the users choice (help read-host)

               $choice = read-host "Choice (1,2,3)"

               # Using the switch command evaluate the input and set the $type variable (help about_switch)

               # If an out of bounds choice is made show the script help

               switch ($choice) {

                       1 {$type = "Mailbox"}

                       2 {$type = "MailContact"}

                       3 {$type = "distributiongroup"}

                       default {write-host " ";write-host "Incorrect options Specified: $choice" -foregroundcolor $error;ShowHelp;exit}

               }

        }

else { }

# Constuct the command to be executed into the $getcommand variable

$getcommand = "get-" + $type + " -resultsize $resultsize " + $add

# Call the FixObject function to fix the objects

FixObject