Exchange-Scripts/exchange-toolkit.ps1

134 lines
5.4 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function Show-Menu {
param (
[string]$Title = 'Exchange 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
Write-Host "to apply the contents of a .csv to the currently logged in Exchange session."
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 "5: Press" -NoNewline
Write-Host -ForegroundColor Cyan " '5' " -NoNewline
Write-Host "to export a list of mailboxes to .pst based on a search term."
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(";")
}
#Print the new values to console for verification
Write-Host -ForegroundColor Green -BackgroundColor White "New Values:"
#Get the mailboxes from Exchange and print the email addresses to confirm the changes.
Foreach ($Alias in $Alias_list) {
$addresses = (Get-Mailbox -Identity $Alias.Displayname).EmailAddresses
Write-Host -Foregroundcolor Red -Backgroundcolor White (Write-Output $Alias.Displayname);
write-Host -foregroundcolor Green -Separator `n (Write-Output $addresses)
}
}
'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 ';'.`nThis 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, "`nUser 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")
}
}
}
}
'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"
}
}
}
Read-Host -Prompt 'Press Enter to Continue'
}
until ($selection -eq 'q')