2021-05-03 03:07:56 +00:00
function Show-Menu {
param (
[ string ] $Title = 'Alias Toolkit by Jeremy Berkleef'
)
Clear-Host
Write-Host -ForegroundColor Green " ================ $Title ================ "
Write-Host " 1: Press " -NoNewline
Write-Host -ForegroundColor Cyan " '1' " -NoNewline
Write-Host " to list the contents of a .csv. "
Write-Host " 2: Press " -NoNewline
Write-Host -Foregroundcolor Cyan " '2' " -NoNewline
2021-05-03 11:55:26 +00:00
Write-Host " to apply the contents of a .csv to the currently logged in Exchange session. "
2021-05-03 03:07:56 +00:00
Write-Host " 3: Press " -NoNewline
Write-Host -ForegroundColor Cyan " '3' " -NoNewline
Write-Host " to create a .csv file of aliases from Exchange based on a search term. "
Write-Host " 4: Press " -NoNewline
Write-Host -ForegroundColor Cyan " '4' " -NoNewline
Write-Host " to use the legacy search script and output the alias list to console. "
Write-Host " Q: Press " -NoNewline
Write-Host -ForegroundColor Red " 'Q' " -NoNewline
Write-Host " to quit. "
}
do
{
Show-Menu
$selection = Read-Host " Please make a selection "
switch ( $selection )
{
'1' {
#Ask where the .csv is
$CsvLocation = Read-Host -Prompt 'CSV path'
#Print a new line
Write-Host ` n
#Read the .csv and print it to console
Import-Csv $CsvLocation | ForEach-Object {
Write-Host -Foregroundcolor Red -Backgroundcolor White ( Write-Output $_ . Displayname ) ;
write-Host -foregroundcolor Green -Separator ` n ( Write-Output $_ . EmailAddresses . Split ( " ; " ) )
}
}
'2' {
#Ask where the .csv is and import the values into the Alias_List variable
$CsvLocation = Read-Host -Prompt 'CSV path'
$Alias_list = Import-Csv $CsvLocation
#Print a new line
Write-Host ` n
#Read the .csv, apply the aliases and print the resulting aliases
Foreach ( $Alias in $Alias_list ) {
Set-Mailbox -Identity $Alias . Displayname -EmailAddresses $Alias . EmailAddresses . Split ( " ; " )
}
#Get the mailboxes from Exchange Online and print the email addresses to confirm the changes.
Foreach ( $Alias in $Alias_list ) {
2021-05-03 11:55:26 +00:00
$addresses = ( Get-Mailbox -Identity $Alias . Displayname ) . EmailAddresses
2021-05-03 03:07:56 +00:00
if ( $addresses -eq $Alias . EmailAddresses ) {
Write-Host " $( $Alias . Displayname ) " -NoNewline
Write-Host -ForegroundColor Green " Success! "
}
else {
Write-Host " $( $Alias . Displayname ) " -NoNewline
Write-Host -ForegroundColor Red " FAILURE "
}
}
}
'3' {
#Ask the user what we're looking for and we're we're going to save the .csv
$searchTerm = Read-Host -Prompt 'Input search query'
$CsvSavePath = Read-Host -Prompt 'Input location to save .csv'
#List Aliases and select
get-mailbox | Where-Object { $_ . EmailAddresses -like " $searchTerm " } | Select-Object Displayname , @ { Name = " EmailAddresses " ; Expression = { $_ . EmailAddresses } } | Export-Csv -NoTypeInformation $CsvSavePath
#Remind the user that they need to fix the csv formatting.
Write-Host -ForegroundColor Red -BackgroundColor Black " Please be sure to remember to format the .csv correctly before importing it back into an Exchange Server or Exchange Online "
Write-Host ` n
Write-Host -BackgroundColor Black -ForegroundColor Blue " Before importing, delete the non-email addresses from the .csv and replace the spaces between addresses with ';'. `n This is a safety measure to prevent applying an incompatible address. "
}
'4' {
# Ask the user what we need to search for
$searchTerm = Read-Host -Prompt 'Input Query'
#List Aliases
get-mailbox | Where-Object { $_ . EmailAddresses -like " $searchTerm " } | ForEach-Object {
$host . UI . Write ( " White " , $host . UI . RawUI . BackGroundColor , " `n User Name: " + $_ . DisplayName + " `n " )
for ( $i = 0 ; $i -lt $_ . EmailAddresses . Count ; $i + + )
{
$address = $_ . EmailAddresses [ $i ]
$host . UI . Write ( " Green " , $host . UI . RawUI . BackGroundColor , $address . AddressString . ToString ( ) + " `t " )
if ( $address . IsPrimaryAddress )
{
$host . UI . Write ( " Blue " , $host . UI . RawUI . BackGroundColor , " Primary Email Address `n " )
}
else
{
$host . UI . Write ( " Red " , $host . UI . RawUI . BackGroundColor , " Alias `n " )
}
}
}
}
}
Read-Host -Prompt 'Press Enter to Continue'
}
until ( $selection -eq 'q' )