Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Powershell – Script de MailFlow Externe

 

Le script suivant:

– envoi un mail a un responder (ping@oleane.net)

– attends et récupère la réponse du responder dans Outlook

– retourne un état en cas d’echec

– retourne un état et le message en cas de succes, et supprime le message.

Prerequis: client outlook installé avec le composant “Visual Basic for application” et présence de l’assembly .net Microsoft.Office.Interop.Outlook (cette assembly est présente dans le dossier C:\Windows\assembly).

Dans le menu Outil/Macro/Sécurité , cochez l’option ci-dessous

image image

Paramètre de script a modifier:

$smtpServer: le nom du serveur smtp

$From: l’emeteur du mail

$ReplyTo: l’adresse de réponse

$Dest: le destinataire du mail

$Subject: le sujet du mail

$Body: le corp du mail

$SecondToWait: le temps d’attente de la réponse du responder

[System.Reflection.Assembly]::Load("Microsoft.Office.Interop.Outlook, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")

    [string]$smtpServer=”mon_serveur_smtp@home.fr”

    [string]$From="test@home.fr"

    [string]$ReplyTo="test@home.fr"

    [string]$Dest="ping@oleane.net"

    [string]$Subject="Test envoi mail"

    [string]$Body="Test envoi mail"

    [string]$SecondToWait =90

 

function sendMail

{

     Write-Host "Sending Email"

     #Creating a Mail object

     $msg = new-object Net.Mail.MailMessage

     #Creating SMTP server object

     $smtp = new-object Net.Mail.SmtpClient($smtpServer)

     #Email structure

     $msg.From = "$From"

     $msg.ReplyTo = "$ReplyTo"

     $msg.To.Add("$Dest")

     $msg.subject = "$Subject"

     $msg.body = "$Body"

     #Sending email

     $smtp.Send($msg)

}

Function Get-MessageInBox

{

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]

$outlook = new-object -comobject outlook.application

$namespace = $outlook.GetNameSpace("MAPI")

write-host "waiting for the response from Oleane…"

$namespace.SendAndReceive($false)

sleep -Seconds $SecondToWait

$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)

$folder.items |

Select-Object -Property * -Last 1 | where-object {$_.subject -eq "[echo] Votre message a $Dest"}

}

 

Function Delete-mail

{

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]

$outlook = new-object -comobject outlook.application

$namespace = $outlook.GetNameSpace("MAPI")

$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)

$folder.items | Select-Object -Property * -Last 1 | where-object {$_.subject -eq "[echo] Votre message a $Dest"} | tee-object -Variable MessageToDelete

$folder.Items.Remove(1)

}

#Calling function sendmail

sendMail

#Retrieve message to oleane in inbox

Get-MessageInBox | Tee-Object -Variable Message | out-null

if ($Message -eq $null)

{

write-host -ForegroundColor Darkred "—PAS ENCORE DE REPONSE DE $Dest—"

}

else

{

write-host -ForegroundColor Darkgreen "—REPONSE OK DE $Dest—"

Write-Host -ForegroundColor Darkgreen "—-MESSAGE—-:"

Write-Host "SUJET:" $Message.Subject

Write-Host "ENVOYE LE:" $Message.SentOn

Write-Host "RECU LE:" $Message.ReceivedTime

Write-Host "CORP DU MESSAGE:" $Message.Body

Clear-Variable -Name Message

Write-Host -ForegroundColor Yellow "SUPPRESSION DU MESSAGE…"

Delete-mail | Out-Null

}

EXCHANGE 2010 SP2 – Convertir une boite aux lettres

A la sortie d’Exchange 2010 convertir par exemple une “linked mailbox” vers une

“user mailbox” impliquez la suppression de la boite puis de réaliser une reconnexion.

Le SP2 offre la possibilité par “powershell” de modifier le type de boite.

Voici une boite liée:

image

image

On constate visuellement ainsi qu’en utilisant le “powershell” que c’est une “linkedmailbox”.

On exécute la commande pour réaliser la conversion (set-user):

image

On remarque visuellement ainsi qu’en utilisant le  “powershell” que le boite est maintenant de type “usermailbox”.

image

image

Et voilà.

Microsoft stipule que les permissions Send As, Full Access, partages,etc sont perdues.

Pour ma part je ne l’ai pas constaté.

L’ouverture de cette boite n’est pas toujours instantanée (réplication des informations).

Référence : http://technet.microsoft.com/en-us/library/bb201694.aspx

Exchange2010 – Erreur lors de l’installation du rôle Hub Transport

Symptôme

Lors d’un déploiement d’Exchange Server 2010 SP2 avec RU4v2 (rollup stocké dans le sous-dossier Updates des sources Exchange), j’ai rencontré l’erreur suivante durant l’installation du rôle Hub :

Service “MSExchange Transport” failed to reach status “Running” on this server.

image

Voici le détail de l’erreur dans le journal Application :

Event ID : 1002
Source : MSExchangeSetup
Task Category : Microsoft Exchange Setup
Level : Error
Error :
The following error was generated when "$error.Clear(); if ($RoleStartTransportService) { start-SetupService -ServiceName MSExchangeTransport }" was run: "Service ‘MSExchangeTransport’ failed to start. Check the event log for possible reasons for the service start failure.".
Service ‘MSExchangeTransport’ failed to start. Check the event log for possible reasons for the service start failure.

 

Cette erreur à l’installation peut être considéré comme un “classique” d’Exchange 2010 lorsqu’une mauvaise configuration IPv6 est positionnée sur le serveur (cf. ce billet réalisé peu après la sortie d’Exchange 2010 : http://blog.piservices.fr/post/Exchange2010-Erreur-lors-de-linstallation-du-role-de-transport-Hub.aspx).

Néanmoins dans ce cas précis l’erreur n’était pas liée à la configuration IPv6 (interface réseau et clé de registre DisableComponents correctement configurés).

Après investigation l’erreur d’installation s’accompagnait de plusieurs évènements autour du service AD Topology dont le suivant :

Event ID: 2080
Source: MSExchange ADAccess
Task Category:
Topology
Level:
Information
Error:
Process MSEXCHANGEADTOPOLOGYSERVICE.EXE (PID=2386). Exchange Active Directory Provider has discovered the following servers with the following characteristics:
(Server name | Roles | Enabled | Reachability | Synchronized | GC capable | PDC | SACL right | Critical Data | Netlogon | OS Version)
In-site:
dc01.domain.lan CDG 1 7 7 1 0 0 1 7 1
dc02.domain.lan CDG 1 7 7 1 0 0 1 7 1
dc03.domain.lan CDG 1 7 7 1 0 0 1 7 1
Out-of-site:
dc05.domain.lan CDG 1 7 7 1 0 0 1 7 1
dc06.domain.lan CDG 1 7 7 1 0 0 1 7 1

Explication

Après investigation il s’avère que le problème d’installation est dû à un droit manquant sur la stratégie de groupe Default Domain Controllers Policy  pour le groupe Exchange Servers.

Pour rappel le groupe Exchange Servers est créé lors de la phase de préparation de l’annuaire Active Directory pour Exchange 2010 (ou Exchange 2007) et plus exactement via la commande setup.com /PrepareAD.

Lors de la phase de préparation des domaines via la commande setup.com /PrepareDomain la GPO Default Domain Controllers Policy de chaque domaine est modifiée de manière à donner le droit Manage auditing et security log au groupe Exchange Servers.

Dans le cas rencontré ici ce droit était manquant (d’où la présence d’un zéro dans la colonne SACL right lors de la détection des contrôleurs de domaine par le service de détection de la topologie Active Directory).

Résolution

Pour résoudre le problème rencontré la stratégie de groupe GPO Default Domain Controllers Policy est éditée via la console Group Policy Management Editor. Le droit manquant est situé dans l’emplacement suivant :

Computer Configuration / Policies / Windows Settings / Security Settings / Local Policies / user Rights Assignments

image

Il faut modifier le paramètre Manage auditing and security log et y ajouter le groupe nommé “Domaine racine \ Exchange Servers”.

image

Une fois la modification de stratégie de groupe prise en compte (comptez quelques minutes), l’instalation du rôle Hub Transport peut être relancée et cette fois-ci se déroule sans encombres.

Pour aller plus loin, vous pouvez consulter les articles suivants :

http://blogs.technet.com/b/richardroddy/archive/2010/06/16/msexchange-adaccess-dsaccess-errors-and-the-manage-auditing-and-security-right.aspx

http://jasonshave.blogspot.fr/2010/04/dscenosuitablecdc-error-with-exchange.html

http://blog.mattsampson.net/index.php/exchange-hogging-dc-s-and?blog=1