Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Config Mgr 2012 R2 – Erreur de connexion au portail d’application

Contexte

Dans le produit System Center Configuration Manager 2012 R2 il est possible de mettre à disposition un catalogue d’applications pour les utilisateurs finaux. L’implémentation de ce portail « Self-Service » repose sur un service web et nécessite la mise en place des rôles Config Mgr suivants :

  • Application Catalog web service point
  • Application Catalog website point

L’ajout des deux rôles ne pose aucun problème, cependant il est possible que vous rencontriez le problème ci-dessous lors de l’accès à votre catalogue d’application.

2013-12-06_155211_3

Explication

Bien que l’assistant d’installation des rôles ne vous ait pas remonté de problème, il est possible que les choses ne se soient pas passées comme prévu. Si vous rencontrer le message d’erreur « Cannot connect to the application server », c’est qu’il manque très certainement un composant pour rentre votre portail d’application disponible.

Résolution

Pour identifier la source du problème je vous invite à vous rendre dans le répertoire contenant les logs de Config Mgr 2012 R2. Par défaut les logs se trouvent dans le chemin suivant :
[Program Files]\Microsoft Configuration Manager\Logs

Le fichier qui nous intéresse est nommé SMSAWEBSVCSetup.log. Celui-ci est dédié à l’installation du Web-Service du catalogue d’application.

2013-12-06_155255_2

Lors de l’installation du rôle, une analyse de l’ensemble des éléments prérequis pour la mise en service du Web Services est réalisée. En parcourant le fichier, je découvre que composant Windows Communication Foundation (WCF) n’est pas activé : « WCF is not activated ».

Pour remédier à ce problème, je vous invite à prendre connaissance aux prérequis spécifiques à l’implémentation du rôle « Application Catalog web service point ». http://technet.microsoft.com/en-us/library/gg682077.aspx#BKMK_Win2k12SiteSystemPrereqs.

Rendez-vous dans votre console Server Manager pour installer la ou les fonctionnalités manquantes pour l’installation du rôle. Il est probable que l’option HTTP Activation ne soit pas activée et qu’elle soit à l’origine de l’erreur. Vous trouverez ci-dessous une capture du lien Technet proposé plus haut et qui détaille les éléments nécessaires pour le bon fonctionnement du portail d’application.

2013-12-10_164313

2013-12-10_165700

Après avoir ajouté les composants manquants, réinstaller le rôle « Application Catalog web service point ».

L’accès à votre portail d’application devrait être à présent fonctionnel.

2013-12-06_163851_3

Desired State Configuration (Partie 2) : LocalConfigurationManager et Mode Push

Introduction

Cet article fait partie d’une série de 5 billets sur Desired State Configuration :

Desired State Configuration est disponible comme Powershell 4.0 sur Windows 2012 R2/8.1, Winsows 2012/8 et Windows 2008 R2/7.

Il s’agit de la seconde partie qui traite de la configuration du mode Push. Pour rappel, il existe deux modes d’application d’une configuration avec la technologie DSC :

  • Push
  • Pull

Ainsi, nous verrons comment le mode Push fonctionne. Nous nous attarderons ensuite sur la configuration du mode push via une ressource. Enfin, j’expliquerai comment appliquer une configuration en mode Push à distance.

Fonctionnement

Le mode Push est le mode par défaut dans Desired State Configuration. Chaque configuration est poussé par l’utilisateur via ligne de commande ou script directement depuis le serveur concerné ou à distance depuis un autre serveur. L’intérêt de la deuxième option est de centraliser les fichiers “.mof” sur un seul serveur. Pour appliquer la configuration il faut utiliser la commande Start-DscConfiguration (comme vu dans la partie 1).

Ressource LocalConfigurationManager

L’une des nombreuses ressources disponibles lors d’une configuration est nommée : LocalConfigurationManager. Cette dernière permet de définir quand et comment seront appliquées les configurations. Elle est décrite dans le lien ci-dessous :

http://technet.microsoft.com/en-us/library/dn249922.aspx

NB : Au 16/12/2013, le lien comporte des erreurs. Nous allons donc voir ici les différents attributs qui peuvent nous intéresser pour le mode Push.

La ressource LocalConfigurationManager s’utilise comme toutes les autres ressources de DSC. Il va donc être nécessaire de générer un “.mof” contenant cette ressource, puis l’appliquer. Pour récupérer la configuration actuelle  du LocalConfigurationManager  du serveur, il faut utiliser la commande :

001
Get-DscLocalConfigurationManager

 

Le résultat par défaut est le suivant :image Les attributs intéressants pour le mode Push sont :

  • RefreshMode : La valeur doit être à PUSH.
  • ConfigurationMode : Apply, ApplyAndMonitor, ApplyAndAutoCorrect sont les valeurs possibles. Apply définit qu’il faut simplement appliquer la configuration. ApplyAndMonitor ajoute une phase de contrôle et loguera les éventuelles dérives de configuration (dans l’observateur d’événements). ApplyAndAutoCorrect réapplique la configuration après chaque nouveau test, s’il y a une dérive.
  • RefreshFrequencyMins : Il s’agit de l’intervalle de temps pour l’actualisation du fichier de configuration. La valeur minimal est 15 minutes.
  • ConfigurationModeFrequencyMins : C’est le temps entre chaque vérification de conformité.
  • RebootNodeIfNeeded : C’est un booléen autorisant ou non le redémarrage automatique de la machine si celui-ci est nécessaire.

    Voici un exemple de script configurant la ressource LocalConfigurationManager :

    001
    002
    003
    004
    005
    006
    007
    008
    009
    010
    011
    Configuration SetPushMode
    {
        Node WEBSRV01 {
           
            LocalConfigurationManager {
                ConfigurationMode = "ApplyandMonitor" 
                RefreshMode = "Push"
                RefreshFrequencyMins = 30
            }
        }
    }

    On invoque ensuite le bloc Configuration (ligne 1) et on l’applique (ligne 2) afin que la configuration soit prise en compte.

    001
    002
    SetPushMode -OutputPath C:\DSCConfig
    Set-DscLocalConfigurationManager -Path C:\dscconfig\ -ComputerName WEBSRV01 -Credential "WEBSRV01\Administrator" -Verbose

    Ici, les paramètres Credendial et ComputerName sont renseignés permettant d’appliquer la configuration de la ressource à distance.

    Pour que la connexion à distance fonctionne, il est nécessaire de pouvoir se connecter en WMI à distance à “root/Microsoft/Windows/DesiredStateConfiguration”. Pour configurer ce pré-requis, il faut se référer à l’article suivant : http://blog.piservices.fr/post/Powershell-Gestion-a-distance.aspx.

Application d’une configuration à distance

Nous avons vu l’application d’une configuration en mode Push lors de la partie 1. Nous verrons donc ici simplement un complément permettant d’appliquer une configuration à distance. On peut ainsi imaginer un script s’exécutant sur un serveur central possédant tout les fichiers “.mof”. Ce script bouclera sur l’ensemble des serveurs d’une liste et lance les commandes de configuration. Dans cet exemple, on considère qu’un fichier “.mof” a été généré dans “C:\DSCConfig”.

001
Start-DscConfiguration -ComputerName WEBSRV01 -Path C:\dscconfig -Verbose -Wait

Les paramètres utilisés ainsi que les pré requis sont les mêmes que précédemment, seul la cmdlet utilisée change.

SCOM et alertes WMI: Script de redémarrage du service wmi et de ses dépendances

 

Le script suivant récupère les alertes ouvertes pour une machine, qui correspondent a des erreurs de requetage wmi. Si il en trouve au moins une dont le repeatcount est supérieur a une valeur donnée en variable, il redémarre le service wmi et ses dépendances et clos les alertes correspondantes.

   1:  

   2: $scomms="scom2k12sp1srv1"

   3: $targetcomputer="scom2k12sp1dc1"

   4: $repeatcountthreshold="1"

   5: $wmi="WinMgmt"

   6:  

   7: $scomcred=Get-Credential -Credential "scom2k12sp1maq1\administrator"

   8: $arrwmialerts=@(“Operations Manager failed to run a WMI query","Workflow Initialization: Failed to start a workflow that queries WMI for performance data","Workflow Initialization: Failed to start a workflow that queries WMI for WMI events","Operations Manager failed to run a WMI query for WMI events",

   9: "Operations Manager failed to run a performance data WMI query","Workflow Initialization: Failed to start a workflow that queries WMI","Script Based Test Failed to Complete")

  10:  

  11: Import-Module operationsmanager

  12:  

  13: New-SCOMManagementGroupConnection -ComputerName $scomms -Credential $scomcred

  14:  

  15: $arrcomputernewalertnames=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false } | Select-Object -Property name -ExpandProperty name

  16: $arrcomputernewalerts=Get-SCOMAlert | Where-Object {$_.Resolutionstate -eq "0" -and $_.NetbiosComputerName -eq $targetcomputer -and $_.RepeatCount -gt $repeatcountthreshold -and $_.IsMonitorAlert -eq $false }

  17:  

  18:  

  19:  

  20: $matchingalerts=0

  21: foreach ($wmialert in $arrwmialerts)

  22: {

  23:   if ($arrcomputernewalertnames -contains $wmialert)

  24:     {

  25:     Write-Host -ForegroundColor Red -BackgroundColor White "L'alerte "$wmialert.ToUpper()" a été répétée plus de $repeatcountthreshold fois sur $targetcomputer"

  26:     Write-Host -ForegroundColor Yellow "Fermeture de l'alerte "$wmialert.ToUpper()" avant redemarrage du service $wmi et de ses dependances"

  27:     $matchingalerts= ($matchingalerts + 1)

  28:     $arrcomputernewalerts | Where-Object {$_.Name -like "$wmialert*"} | foreach {Set-SCOMAlert -ResolutionState 255 -Alert $_ }

  29:     }

  30: }

  31:  

  32:  

  33: ###FUNCTIONS###

  34: Function Restart-Wmi ($targetcomputer)

  35: {

  36: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {

  37: $winmgmt=Get-Service -Name Winmgmt

  38: $winmgmtrundep=$winmgmt.DependentServices | Where-Object {$_.Status -eq "Running"}

  39: Stop-Service -Name Winmgmt -Force -ErrorAction SilentlyContinue

  40: Start-Sleep -Seconds 5

  41: Start-Service -Name Winmgmt -ErrorAction silentlycontinue

  42: Start-Sleep -Seconds 5

  43:  

  44: foreach ($dep in $winmgmtrundep) 

  45:     {

  46:     if (Get-WmiObject win32_service | Where-Object {$_.Name -eq $dep.Name -AND $_.state -ne "running" -AND $_.startmode -eq "Auto"}) 

  47:         {

  48:         write-host -ForegroundColor Green "demarrage de la dependance "$dep.Name.ToUpper()""

  49:         Start-Service -Name $dep.Name -erroraction SilentlyContinue -ErrorVariable ("start_"+$dep.Name+"_error").ToString()

  50:         }

  51:     }

  52:  

  53: }

  54: }

  55:  

  56:  

  57: Function NewEventSource

  58: {

  59:     if(!(Test-Path 'HKLM:\SYSTEM\CurrentControlSet\services\eventlog\Operations Manager\RestartWMIScript'))

  60:     {

  61:     New-EventLog -LogName "Operations Manager" -Source RestartWMIScript

  62:     }

  63: }

  64: ###FUNCTIONS###

  65:  

  66:  

  67:  

  68:  

  69:  

  70:  

  71: if ($matchingalerts -gt 0)

  72: {

  73: write-host -ForegroundColor Yellow "Redemarrage du service WinMgmt et de ses dependances"

  74: Restart-Wmi $targetcomputer

  75: }

  76: else

  77: {

  78: write-host -ForegroundColor Green "Pas d'alertes correspondantes trouvées"

  79: Write-Host -ForegroundColor Green "Pas de redemarrage du service WinMgmt et de ses dependances"

  80: exit

  81: }

  82:  

  83:  

  84:  

  85:  

  86:  

  87: ###VERIFICATION ET LOG D'ERREURS

  88:  

  89:  

  90: Invoke-Command -ComputerName $targetcomputer -Credential $scomcred -ScriptBlock {

  91: param($targetcomputer)

  92: $wmi=Get-Service -Name WinMgmt -ComputerName $targetcomputer

  93: if ($wmi.Status -ne "Running")

  94: {

  95: $function:NewEventSource

  96: Write-EventLog -LogName 'Operations Manager' -Source RestartWMIScript -EntryType Error -EventId 1002 -Message "erreur de demarrage du service winmgmt"

  97: }

  98:  

  99: } -Argumentlist $targetcomputer

 100:  

 101: ###VERIFICATION ET LOG D'ERREURS

 102:  

 103:  

 104: