WeetA

Quand normalement rime avec rarement !

[Mise à jour] Bug Distribution dans le calculateur Exchange 2013 7.5 et 7.6 --> Corrigé dans la version 7.8

15.10.2015

La version 7.8 publiée ce jour inclus le correctif présenté ci-après.

20.06.2015

Microsoft a mis à jour son calculateur pour Exchange 2013 le 19 Juin en version 7.5.

Un bug empéchant d'afficher les résultats lorsque Site Resilience était désactivé et que Active/Active (Single DAG) était sélectionné a été corrigé le lendemain dans la version 7.6.

Par contre, le bug que j'ai rencontré dans l'onglet Distribution de la version 7.5 est toujours présent dans la 7.6.

J'ai trouvé, apporté une correction et envoyé le problème à Microsoft mais je n'ai eu aucun retour à ce jour.

C'est quoi le problème ?

Vous êtes Français ? Vous avez peut-être choisi votre langue maternelle comme langue de formatage des dates, nombres dans les paramètres régionaux. Et ça, c'est un problème. Ca empêche le simulateur de distribution des copies de bases de fonctionner correctement.

Dès que vous passez 1 serveur en Fail, vous vous retrouvez avec des bases HS et ce malgré les 4 copies par défaut.

Pourquoi ?

Parce que... la formule permettant de calculer le serveur hébergeant la copie active ne fonctionne pas avec le format Français (au moins).
Elle utilise la fonction TEXT avec le caractère de formatage d qui signifie "Day without leading zero". Hors, avec le format Français, il faudrait mettre j à la place. Mais si on met j, ça ne fonctionne plus avec un format English (US).

Comment on résout ?

La formule ne gère pas réellement de formatage de date. Il s'agit juste d'une feinte pour convertir un nombre en sa version texte. On peut donc remplacer le caractère de formatage d par celui des nombres #.

Allez dans le code VBA (Menu Developper, Visual Basic)

Ensuite, ouvrez le module1

Puis allez dans la fonction Build_Table

Trouvez le code ci-dessous

    'Cycle through each DB in the design
    'Populate formula to determine which server hosts the active copy of a DB
    'Create one cell formula that looks at DB copies from all sites
    'DAGQuroumStatus
    For x = StartRow To NumDataBases + StartRow - 1
        Formula1 = "=IF(OR(DAGQuroumStatus=""" & DAGStringFail & """,ISNA(MATCH(MIN(" & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0))),""FAILED"", IF(OR(IsSecSiteActive(),AND(IF(ISNA(MATCH(TEXT(VALUE(1),""d"")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0)),MATCH(1," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0),MATCH(TEXT(VALUE(1),""d"")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0))<=calcNumAMBXServersDC1,MATCH(MIN(" & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0)<=calcNumAMBXServersDC1),AND(IF(ISNA(MATCH(TEXT(VALUE(1),""d"")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0)),MATCH(1," & DiagramStart(1) & x & ":"
        Formula2 = DiagramEnd(NumSites) & x & ",0),MATCH(TEXT(VALUE(1),""d"")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0))>17,MATCH(MIN(" & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0)>17)),GetServer(MATCH(MIN(" & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ")," & DiagramStart(1) & x & ":" & DiagramEnd(NumSites) & x & ",0)),""FAILED""))"

Remplacez toutes les occurences de

TEXT(VALUE(1),""d"")

par

TEXT(VALUE(1),""#"")

Enregistrez le tout et rafraîchissez l'onglet Distribution

Voila le résultat

An unhandled exception occurred in the Autodiscover service (EventID 1 & 2005)

Symptômes

Unhandled Exception "displayName has zero length
Parameter name: displayName"
Stack Trace:    at Microsoft.Exchange.Data.Storage.ExchangePrincipal.FromMailboxData(String displayName, String serverFqdn, String serverLegacyDN, String mailboxLegacyDN, Guid mailboxGuid, Guid mdbGuid, String primarySmtpAddress)
   at Microsoft.Exchange.Autodiscover.Providers.Outlook.OutlookAutoDiscoverProvider.GetRedirectURL()
   at Microsoft.Exchange.Autodiscover.Core.Service.GenerateResponse()
   at Microsoft.Exchange.Autodiscover.Default.OnLoad(EventArgs args)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

The Autodiscover request processed with error, User SID:"S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxx", HostAddress:"10.xxx.xxx.xxx", HostName:"10.xxx.xxx.xxx".

Cause

Comme indiqué dans l'event ID 1, l'utilisateur n'a pas de Display Name (longueur de 0).

Résolution

Remettre un Display Name à l'utilisateur

Retrouver l'utilisateur

Méthode 1 - Exchange Management Shell 2007 / Get-User

[PS] Get-User -Filter { Sid -eq "S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-500" }

Name                                                        RecipientType
----                                                        -------------
Administrator                                               UserMailbox

Méthode 2 - Exchange Management Shell 2010+ / Get-User

[PS] Get-User "S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-500"

Name                                                        RecipientType
----                                                        -------------
Administrator                                               UserMailbox

Méthode 3 - PowerShell / .Net Security Principal

[PS] $SecurtityIdentifier = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-500")
[PS] $SecurtityIdentifier.Translate([System.Security.Principal.NTAccount])

Value
-----
NEWLAB\Administrator

Méthode 4 - PowerShell avec module ActiveDirectory / Get-ADUser

[PS] Import-Module ActiveDirectory
[PS] Get-ADUser "S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-500"
DistinguishedName : CN=Administrator,CN=Users,DC=newlab,DC=local
Enabled           : True
GivenName         :
Name              : Administrator
ObjectClass       : user
ObjectGUID        : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SamAccountName    : Administrator
SID               : S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-500
Surname           :
UserPrincipalName : Administrator@newlab.local

Remettre le Display Name

Méthode 1 - Automatique

[PS] Get-Mailbox Administrator | Set-Mailbox
WARNING: The object newlab.local/NewLab/Users/Administrator has been corrupted, and it's in an inconsistent state.
The following validation errors happened:
WARNING: DisplayName is mandatory on UserMailbox.
[PS] Get-Mailbox Administrator | fl DisplayName
DisplayName : Administrator

Méthode 2 - Manuelle

[PS] Set-Mailbox Administrator -DisplayName "Administrator"
[PS] Get-Mailbox Administrator | fl DisplayName
DisplayName : Administrator