Microsoft Exchange Server is a mail server, calendaring software and contact manager. It runs on Windows Server and it is one of the main elements present into a Microsoft infrastructure. It often happens that one of the first requirements of an identity manager project is to integrate Microsoft Exchange in order to manage, into the global/centralized user workflow, mailboxes and mail contacts as well.
Microsoft Exchange Server is a mail server, calendaring software and contact manager.
It runs on Windows Server and it is one of the main elements present into a Microsoft infrastructure.
It often happens that one of the first requirements of an identity manager project is to integrate Microsoft Exchange in order to manage, into the global/centralized user workflow, mailboxes and mail contacts as well.
Apache Syncope gives you the possbility to integrate Microsoft Exchange via PowerShell scripts by CMD ConnId connector .
The main integration steps are: PowerShell resource configuration (as aleady described into Apache Syncope and PowerShell scripts post) and PowerShell scripts development.
Scripts must have, more or less, the following structure.
# Create MS Exchange PowerShell session
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ....
if($session) {
# Invoke remote script
Invoke-Command -Session $session -ScriptBlock {
...
} -ArgumentList ...
# Remove session
Remove-PSSession $Session 2>&1> $Null
}
Search for all mailboxes can be done with the following code.
Invoke-Command -Session $session -ScriptBlock {
param($searchDN)
Get-Mailbox -ResultSize Unlimited -OrganizationalUnit $searchDN -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
} -ArgumentList $searchDN | ForEach-Object -Process {
"--- NEW SEARCH RESULT ITEM ---"
"__UID__=" + $_.SamAccountName
"__NAME__=" + $_.SamAccountName
"__ENABLE__=true"
}
A script to search for a specific mailbox can be something like the following.
Invoke-Command -Session $session -ScriptBlock {
param($uid, $domain)
$user=Get-Mailbox -Identity $domain\$uid -ErrorAction SilentlyContinue
if($user){
"--- NEW SEARCH RESULT ITEM ---"
"__UID__=" + $user.SamAccountName
"__NAME__=" + $user.SamAccountName
"__ENABLE__=true"
}
} -ArgumentList $uid, $domain
The next one can be used to create a new mailbox.
Invoke-Command -Session $session -ScriptBlock {
param($uid, $domain)
$user=Get-Mailbox -Identity $domain\$uid -ErrorAction SilentlyContinue
if(!$user){
$user=Enable-Mailbox -Identity $domain\$uid -ErrorAction SilentlyContinue
}
"__UID__=" + $user.SamAccountName
} -ArgumentList $uid, $domain
With the following script you can remove mailbox/mailuser for a certain user.
Invoke-Command -Session $session -ScriptBlock {
param($uid, $domain}
Disable-Mailuser -Identity $domain\$uid -Confirm:$false -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Disable-Mailbox -Identity $domain\$uid -Confirm:$false -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
} -ArgumentList $uid, $domain