TechShizz | All posts tagged 'Office 365'

Customise Office 365 Encrypted Email Notification

Problem
You need to customize the Encrypted email notification that is sent to the recipient of an encrypted email so suit the company's branding/image.
Solution

Connect to the Office 365 Tenant via the Azure PowerShell Module. Use these commands

#Header:
Set-OMEConfiguration -Identity "OME Configuration" -EmailText "Encrypted message from CompanyName secure messaging system."

#Disclaimer:
Set-OMEConfiguration -Identity "OME Configuration" -DisclaimerText "This message is confidential for the use of the addressee only."

#Text that appears at the top of the encrypted mail viewing portal:
Set-OMEConfiguration -Identity "OME Configuration" -PortalText "CompanyName secure email portal."

#Logo:
Set-OMEConfiguration -Identity "OME configuration" -Image (Get-Content "C:\Users\%username%\Desktop\logo.png" –Encoding byte)
#Supported file formats: .png, .jpg, .bmp, or .tiff
#Optimal size of logo file: less than 40 KB
#Optimal size of logo image: 170x70 pixels

#Background color:
Set-OMEConfiguration -Identity "OME Configuration" -BackgroundColor "#ffffff"

Disable Autodiscover for Office 365 Migration

When migrating to Office 365 the internal outlook users are not able to use autodiscover.

This is because the internal exchange server also uses autodiscover in IIS.

Use this description to remove the internal AutodiscoverVirtualDirectory

Be sure that this is the proper migration plan for you’re organization!

1. Open an elevated command prompt and back-up the IIS configuration (Just in case !):

cd %windir%system32inetsrvappcmd.exe add backup “Before Removing Autodiscover”

2. Open an elevated Exchange Management Shell and retrieve the current autodiscover virtual directory:

Get-AutodiscoverVirtualDirectory | fl Name, Server, InternalUrl, Identity

Copy the Identity value to the clipboard.

3. In the Exchange Management Shell, remove the autodiscover virtual directory:

Remove-AutodiscoverVirtualDirectory -Identity “ALPHAAutodiscover (Default Web Site)”

When you’re identity contains a space, use the quotation marks ”

You will have to confirm by typing a “Y”.

4. Check that the autodiscover virtual directory is gone:

Get-AutodiscoverVirtualDirectory | fl Name, Server, InternalUrl, Identity

This should now return nothing.

5. Now, with Outlook running on a desktop, hold the Ctrl button, right-click on the Outlook icon in the system tray, and select Test E-mail AutoConfiguration. Enter your email address and password and click the Test button. The results should come from the Office 365 server.

Office 365 | Add / Remove / Check Calendar Permissions

 This script is designed to be used with the script password encryption for Office 365. See here https://www.techshizz.com/post/powershell-script-password-ecryption-for-multi-site-administration for more info. 

Import-Module MSOnline
$rootpath = (get-item '.\' ).parent.FullName
$clientname = Get-Content "$rootpath\client.txt" -Raw
$user = Get-Content "$rootpath\UserID.txt"
$PasswordFile = "$rootpath\Password.txt"
$KeyFile = "C:\ICU\AES.key"
$key = Get-Content $KeyFile
$UserCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Write-Host "Connecting to Exchange Online for $clientname"
Import-PSSession $Session

function Menu{
$menu=@"
1 Add Calendar Permissions
2 Remove Calendar Permissions
3 Check Calendar Permissions

S Search for an email address
Q Quit

Select a task by number or Q to quit
"@

Write-Host "Calendar Permissions" -ForegroundColor Cyan
$r = Read-Host $menu

Switch ($r) {
"1" {
        $emailaddress = Read-Host "Enter the email of the mailbox to provide Calendar access to"
        $accesslevel = Read-Host "Type the level of access you want to add:
        Author
        Contributor
        Editor
        None
        NonEditingAuthor
        Owner
        PublishingEditor
        PublishingAuthor
        Reviewer
        AvailabilityOnly
        LimitedDetails"
        $deligate = Read-Host "Enter the email address of the deligate"
        Add-MailboxFolderPermission –Identity $emailaddress":\Calendar" –User $deligate –AccessRights $accesslevel
        Write-Host "Adding Mailbox Calendar Permissions..."
        Menu
}

"2" {
    $emailaddress = Read-Host "Enter the email of the mailbox who currently has access that you want to remove"
    $deligate = Read-Host "Enter the email address of the mailbox to which the user has access to"
    Write-Host "Removing Mailbox Calendar Access..."
    Remove-MailboxFolderPermission –Identity $emailaddress":\Calendar" –User $deligate
    Menu
}

"3" {
    $emailaddress = Read-Host "Enter the email address that you want to check permissions for"
    Write-Host "Loading..."
    Get-MailboxFolderPermission -Identity $emailaddress":\Calendar" | Format-Table
    Menu
    }
"S" {
    $search = Read-Host "Enter Name to Search"
    Write-Host "Searching..."
    Get-Mailbox | Where-Object { $_.Name -Like "*$search*" } | Select-Object DisplayName,PrimarySmtpAddress | Format-Table
    Menu
}

"Q" {
    Write-Host "Removing any PS Sessions..." -ForegroundColor Green
    Get-PSSession | Remove-PSSession
    Exit
}

default {
    Write-Host "Choose a valid option... Fool!" -ForegroundColor Yellow
}
} #end switch 
}

Menu

Office 365 - Custom Out of Office Script

This script is designed to be used with the script password encryption for Office 365. See here https://www.techshizz.com/post/powershell-script-password-ecryption-for-multi-site-administration for more info. 

$rootpath = (get-item '.\' ).parent.FullName
$clientname = Get-Content "$rootpath\client.txt" -Raw
$user = Get-Content "$rootpath\UserID.txt"
$PasswordFile = "$rootpath\Password.txt"
$KeyFile = "C:\ICU\AES.key"
$key = Get-Content $KeyFile
$UserCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
#Import the session 
Write-Host "Connecting to Exchange Online for $clientname"
Import-PSSession $Session -AllowClobber | Out-Null


function Menu {
$menu=@"
1 Set an Out of Office
2 Disable an Out of Office
Q Quit

Select a task by number or Q to quit
"@

Write-Host "Out of Office Configuration" -ForegroundColor Cyan
$r = Read-Host $menu

Switch ($r) {
"1" {
    #Collect Info
$mailbox = Read-Host "Enter the email address for the account to apply an out of office message"
$customemessage = Read-Host "Please enter your custom Out of Office message"
#Set the Our of Office
Write-Host "Setting out of office..."
Set-MailboxAutoReplyConfiguration $mailbox -AutoReplyState enabled -ExternalAudience all -InternalMessage "$customemessage" -ExternalMessage "$customemessage"
Write-Host "Out of Office has been set."
}

"2" {
    $mailbox = Read-Host "Enter the email address of the account to disable Out Of Office"
#Disable
Write-Host "Disabling Auto reply for $mailbox"
Set-MailboxAutoReplyConfiguration $mailbox -AutoReplyState disabled
Write-Host "Confirming changes made..."
Get-MailboxAutoReplyConfiguration $mailbox
Write-Host "Ensure the value now reads 'Disabled'"
Menu
}

"Q" {
    Write-Host "Quitting" -ForegroundColor Green
    Get-PSSession | Remove-PSSession
    Exit
}

default {
    Write-Host "Choose a valid option... Fool!" -ForegroundColor Yellow
    Menu
}
} #end switch

}

Menu
## The following four lines only need to be declared once in your script.
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","Description."
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No","Description."
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
 
## Prompt to finsh
$title = "Are you done?"
$message = "Do you want to enable/disable another?"
$result = $host.ui.PromptForChoice($title, $message, $options, 1)
switch ($result) {
    0{
        Write-Host "Script has completed."
        Get-PSSession | Remove-PSSession
    }1{
        Menu
        }
}

Office 365 - Out of Office Script

This script is designed to be used with the script password encryption for Office 365. See here https://www.techshizz.com/post/powershell-script-password-ecryption-for-multi-site-administration for more info. 

$rootpath = (get-item '.\' ).parent.FullName
$clientname = Get-Content "$rootpath\client.txt" -Raw
$user = Get-Content "$rootpath\UserID.txt"
$PasswordFile = "$rootpath\Password.txt"
$KeyFile = "C:\ICU\AES.key"
$key = Get-Content $KeyFile
$UserCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
#Import the session 
Write-Host "Connecting to Exchange Online for $clientname"
Import-PSSession $Session -AllowClobber | Out-Null


function Menu {
$menu=@"
1 Set an Out of Office
2 Disable an Out of Office
3 Get status of Out of Office
Q Quit

Select a task by number or Q to quit
"@

Write-Host "Out of Office Configuration" -ForegroundColor Cyan
$r = Read-Host $menu

Switch ($r) {
"1" {
    #Collect Info
$mailbox = Read-Host "Enter the email address for the account to apply an out of office message"
$alternatecontact = Read-Host "Enter the name of the person to contact in their absence"
$tel = Read-Host "Enter the telephone number for the alternate contact"
$email = Read-Host "Enter an alternate email address the user can be contacted on"
#Set the Our of Office
Write-Host "Setting out of office..."
Set-MailboxAutoReplyConfiguration $mailbox -AutoReplyState enabled -ExternalAudience all -InternalMessage "I am out of the office and unable to reply to your email. In my absence please contact $alternatecontact on $tel." -ExternalMessage "I am out of the office and unable to reply to your email. In my absence please contact $alternatecontact on $tel or email $email"
Write-Host "Out of Office has been set."
}

"2" {
    $mailbox = Read-Host "Enter the email address of the account to disable Out Of Office"
#Disable
Write-Host "Disabling Auto reply for $mailbox"
Set-MailboxAutoReplyConfiguration $mailbox -AutoReplyState disabled
Write-Host "Confirming changes made..."
Get-MailboxAutoReplyConfiguration $mailbox
Write-Host "Ensure the value now reads 'Disabled'"
Menu
}

"3" {
    $mailbox = Read-Host "Enter the email address of the account you want to see the status of Out of Office"
#Disable
Write-Host "Checking Auto reply status for $mailbox"
get-MailboxAutoReplyConfiguration $mailbox
Write-Host "You can now review the current out of office status for $mailbox above."
Menu
}

"Q" {
    Write-Host "Quitting" -ForegroundColor Green
    Get-PSSession | Remove-PSSession
    Exit
}

default {
    Write-Host "Choose a valid option... Fool!" -ForegroundColor Yellow
    Menu
}
} #end switch

}

Menu
## The following four lines only need to be declared once in your script.
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","Description."
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No","Description."
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
 
## Prompt to finsh
$title = "Are you done?"
$message = "Do you want to enable/disable another?"
$result = $host.ui.PromptForChoice($title, $message, $options, 1)
switch ($result) {
    0{
        Write-Host "Script has completed."
        Get-PSSession | Remove-PSSession
    }1{
        Menu
        }
}