2021-05-03 03:07:56 +00:00
function Show-Menu {
param (
2021-10-29 09:25:35 +00:00
[ string ] $Title = 'Exchange Toolkit by Jeremy Berkleef'
2021-05-03 03:07:56 +00:00
)
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. "
2021-10-29 09:25:35 +00:00
Write-Host " 5: Press " -NoNewline
Write-Host -ForegroundColor Cyan " '5' " -NoNewline
Write-Host " to export a list of mailboxes to .pst based on a search term. "
2021-05-03 03:07:56 +00:00
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 ( " ; " )
}
2021-05-05 11:51:56 +00:00
#Print the new values to console for verification
Write-Host -ForegroundColor Green -BackgroundColor White " New Values: "
2021-05-03 11:56:05 +00:00
#Get the mailboxes from Exchange and print the email addresses to confirm the changes.
2021-05-03 03:07:56 +00:00
Foreach ( $Alias in $Alias_list ) {
2021-05-03 11:55:26 +00:00
$addresses = ( Get-Mailbox -Identity $Alias . Displayname ) . EmailAddresses
2021-05-05 11:51:56 +00:00
Write-Host -Foregroundcolor Red -Backgroundcolor White ( Write-Output $Alias . Displayname ) ;
write-Host -foregroundcolor Green -Separator ` n ( Write-Output $addresses )
}
2021-05-03 03:07:56 +00:00
}
'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 " )
}
}
}
}
2021-10-29 09:25:35 +00:00
'5' {
Write-Host -ForegroundColor Blue -BackgroundColor White " For exporting a single mailbox, prepend a * to the mailbox name (e.g. *mailbox@example.com) "
$searchTerm = Read-Host -Prompt " Search Query "
Write-Host -ForegroundColor Blue -BackgroundColor White " Path must be in UNC format for Exchange to export to. "
$savePath = Read-Host -Prompt " Export Path "
$mailboxes = get-mailbox | Where-Object { $_ . EmailAddresses -like " $searchTerm " }
Foreach ( $mailbox in $mailboxes ) {
#Concatenate the save path and the mailbox alias.
$exportPath = Join-Path $savePath $mailbox . Alias
New-MailboxExportRequest -Mailbox $mailbox -FilePath " $exportPath .pst "
}
}
2021-05-03 03:07:56 +00:00
}
Read-Host -Prompt 'Press Enter to Continue'
}
until ( $selection -eq 'q' )