Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Skype for Business – Retour d’expérience sur la mise en place de la téléphonie 3/3

Contexte

Cet article divisé en trois parties est un retour d’expérience sur la migration d’une téléphonie VOIP/TOIP vers une Skype for Business. Voici la troisième partie qui traitera des solutions connexes à Skype for Business afin d’augmenter le catalogue de fonctionnalités de la solution.

Solutions connexes

Skype for Business n’a pas par défaut une solution pour l’ensemble des besoins téléphonique d’une société. Il existe des solutions tierces qui s’intègrent avec Skype. En voici quelques-unes.

ACD

Les ACD (ou Automatic Call Distribution) sont des dispositifs (logiciels ou matériels) qui permettent la gestion d’un centre d’appels. Ces centres d’appels peuvent être des accueils, des relations patron / secrétaire, un service support…

Par défaut, Skype intègre les Response Groups. Cette fonctionnalité permet de faire des groupements d’appels. Malheureusement cette fonctionnalité est limitée et ne permet pas de répondre à tous les besoins. 

J’ai pu tester deux solutions d’ACD lors de mes projets qui sont :

 Logs et facturation

Il est possible d’activer dans Skype for Business les rapports de surveillance. Pour cela, il faut configurer le rôle SQL Reporting Services sur un serveur Back-End. Ces logs tracent l’ensemble des communications des utilisateurs (chat, partages, appels entrants, sortants…).

Bien que ces logs existent, pour faire de la facturation sur les appels sortants ils sont peu exploitables. Il y a alors deux possibilités, faire appel à une solution tierce (comme Periscope GC http://www.cvt.com.au/periscopegcskypefb ou UC Analytics http://www.mindcti.com/uc-analytics/) ou développer un rapport personnalisé dans SQL Reporting Services.

Conclusion

De nombreux éditeurs ont développés des solutions supplémentaires pour Skype for Business. Microsoft recense l’ensemble des applications tierces compatibles sur le site http://apps.skypeforbusiness.com/.

Ce billet termine mon retour d’expérience sur la téléphonie à travers Skype for Business. J’espère qu’il vous a été utile. 

Active Directory: Windows Server 2008 DCPROMO en erreur

Problème:

Sur Windows Server 2008 quand vous réalisez la rétrogradation d’un contrôleur de domaine à simple serveur membre, vous pouvez rencontrer une erreur de type :

« Operations which require contacting a FSMO operation master will fail until this condition is corrected« 

Ce problème se produit quand la commande essaie de contacter le maître d’infrastructure et qu’elle echoue pour une des raisons suivantes:

  • La ou les partitions mentionnées dans le message d’erreur ne sont plus existantes.
  • Le maître d’infrastructure pour la ou les partitions mentionnées, a été rétrogradé de force ou est hors ligne (hors réseau ou éteint).

Solution:

Dans le premier cas de figure Microsoft préconise un nettoyage des métadonnées de la partition orpheline en utilisant l’outils Dsmgmt (cf: http://technet.microsoft.com/en-us/library/cc730970(ws.10).aspx ).

Dans le deuxième cas de figure il suffit de spécifier un propriétaire du rôle maître d’infrastructure qui est « En ligne« , pour cela vous pouvez exécuter le script suivant à l’aide de la commande :

cscript fixfsmo.vbs DC=DomainDnsZones,DC=VotreNomDeDomaine,DC=XXX (Remplacez XXX par votre extension: fr, com, lan, biz…)

Le script:

Le script ci-dessous permet de modifier l’attribut « fSMORoleOwner » dans le domaine spécifié dans la ligne de commande.

'-------fixfsmo.vbs------------------
const ADS_NAME_INITTYPE_GC = 3
const ADS_NAME_TYPE_1779 = 1
const ADS_NAME_TYPE_CANONICAL = 2

set inArgs = WScript.Arguments

if (inArgs.Count = 1) then
    ' Assume the command line argument is the NDNC (in DN form) to use.
    NdncDN = inArgs(0)
	Else
    Wscript.StdOut.Write "usage: cscript fixfsmo.vbs NdncDN"
	End if
	
if (NdncDN <> "") then

' Convert the DN form of the NDNC into DNS dotted form.
    Set objTranslator = CreateObject("NameTranslate")
    objTranslator.Init ADS_NAME_INITTYPE_GC, ""
    objTranslator.Set ADS_NAME_TYPE_1779, NdncDN
    strDomainDNS = objTranslator.Get(ADS_NAME_TYPE_CANONICAL)
    strDomainDNS = Left(strDomainDNS, len(strDomainDNS)-1)
	
	Wscript.Echo "DNS name: " & strDomainDNS
    
	' Find a domain controller that hosts this NDNC and that is online.
    set objRootDSE = GetObject("LDAP://" & strDomainDNS & "/RootDSE")
    strDnsHostName = objRootDSE.Get("dnsHostName")
    strDsServiceName = objRootDSE.Get("dsServiceName")
    Wscript.Echo "Using DC " & strDnsHostName

    ' Get the current infrastructure fsmo.
    strInfraDN = "CN=Infrastructure," & NdncDN
    set objInfra = GetObject("LDAP://" & strInfraDN)
    Wscript.Echo "infra fsmo is " & objInfra.fsmoroleowner
	
	' If the current fsmo holder is deleted, set the fsmo holder to this domain controller.
    if (InStr(objInfra.fsmoroleowner, "\0ADEL:") > 0) then
	' Set the fsmo holder to this domain controller.
	objInfra.Put "fSMORoleOwner",  strDsServiceName
	objInfra.SetInfo
	
	' Read the fsmo holder back.
	set objInfra = GetObject("LDAP://" & strInfraDN)
	Wscript.Echo "infra fsmo changed to:" & objInfra.fsmoroleowner
	
    End if
	
End if	

 

Une fois le script exécuté vous devriez pouvoir rétrograder votre contrôleur de domaine, si toutefois le problème persistait il faudra passer par la console ADSI Edit.

SCOM – SQL – Requête d’inventaire des overrides

La requête ci-dessous permet de lister tout les overrides de manière ‘clarifiés’ afin d’identifier les objets a la source de ces overrides, les paramètres concernés et les management pack sources et de destination.

Les paramètres @Startdate et @EndDate permettent de spécifier une fenêtre de temps concernant les dates de création et de dernière modification des overrides.

 

 

declare @StartDate  datetime declare @EndDate    datetime set @EndDate = GETDATE() set @StartDate = DATEADD(day,-60,@EndDate)   SELECT DISTINCT MP.MPFriendlyName AS 'Management Pack' , aov.ParentType AS 'Type' ,(CASE        WHEN AOV.OverrideType = 'RuleProperty' THEN R.RuleName        WHEN AOV.OverrideType = 'MonitorProperty' THEN M.MonitorName        WHEN AOV.OverrideType = 'RuleConfiguration' THEN R.RuleName        WHEN AOV.OverrideType = 'MonitorConfiguration' THEN M.MonitorName  END) AS 'NameType', mt.DisplayName AS ContextDisplayName , aov.OverrideableParameterName , aov.Value, (CASE Enforced        WHEN '0' THEN 'False'        WHEN '1' THEN 'True'   END) AS 'Enforced'   , aov.LastModified   , aov.TimeAdded   ,(CASE   WHEN AOV.OverrideType = 'RuleProperty' THEN              (CASE R.RuleEnabled              WHEN '0' THEN 'False'              WHEN '2' THEN 'True'              WHEN '3' THEN 'True'              WHEN '4' THEN 'True'              END)     WHEN AOV.OverrideType = 'MonitorProperty' THEN              (CASE M.MonitorEnabled              WHEN '0' THEN 'False'              WHEN '2' THEN 'True'              WHEN '3' THEN 'True'              WHEN '4' THEN 'True'              END)     WHEN AOV.OverrideType = 'RuleConfiguration' THEN              (CASE R.RuleEnabled              WHEN '0' THEN 'False'              WHEN '2' THEN 'True'              WHEN '3' THEN 'True'              WHEN '4' THEN 'True'              END)                WHEN AOV.OverrideType = 'MonitorConfiguration' THEN              (CASE M.MonitorEnabled              WHEN '0' THEN 'False'              WHEN '2' THEN 'True'              WHEN '3' THEN 'True'              WHEN '4' THEN 'True'              END) END) AS 'Enable_by_default', MPSTORE.MPFriendlyName AS 'MP Stored'   FROM AllOverrideView AS aov LEFT OUTER JOIN Rules AS R WITH (nolock) ON aov.TargetId = R.RuleId AND (aov.OverrideType = 'RuleProperty' OR aov.OverrideType = 'RuleConfiguration') LEFT OUTER JOIN Monitor AS M WITH (nolock) ON aov.TargetId = M.MonitorId AND (aov.OverrideType = 'MonitorProperty' OR aov.OverrideType = 'MonitorConfiguration') LEFT OUTER JOIN  ManagementPack AS MP WITH (nolock) ON (CASE                                                                                               WHEN AOV.OverrideType = 'RuleProperty' THEN R.ManagementPackId                                                                                               WHEN AOV.OverrideType = 'RuleConfiguration' THEN R.ManagementPackId                                                                                               WHEN AOV.OverrideType = 'MonitorProperty' THEN M.ManagementPackId                                                                                               WHEN AOV.OverrideType = 'MonitorConfiguration' THEN M.ManagementPackId                                                                                               END) = MP.ManagementPackId INNER JOIN ManagementPack AS MPSTORE WITH (nolock) ON MPSTORE.ManagementPackId = aov.ManagementPackId LEFT OUTER JOIN ManagedTypeView AS mt WITH (nolock) ON mt.Id = aov.ContextId LEFT OUTER JOIN ManagedTypeView AS mtv WITH (nolock) ON mtv.Id = aov.ContextObjectId   WHERE (MP.MPFriendlyName IS NOT NULL) AND (aov.LastModified BETWEEN @StartDate AND @EndDate) OR (MP.MPFriendlyName IS NOT NULL) AND (aov.TimeAdded BETWEEN @StartDate AND @EndDate)   ORDER BY aov.TimeAdded DESC