Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Stratégies de groupe : Activation du fichier gpsvc.log (Partie 1/3)

Bonjour à tous !

Aujourd’hui nous allons aborder la résolution de problèmes d’application des stratégies de groupe (coté poste client) et plus précisément la partie avancée de cette résolution.

Débug usuel

Habituellement, il faut passer par l’Observateur d’Evènements du poste client afin d’obtenir plus de détails sur l’application des stratégies de groupe.

Deux sections peuvent vous intéresser :

  • Journaux Windows/Système
    • Le niveau de détail est assez limité mais c’est un bon point de départ
    • Vous pouvez filtrer les événements par les sources pour ne garder que les parties intéressantes

  • Journaux des applications et des services/Microsoft/Windows/GroupPolicy
    • Est beaucoup plus détaillé
    • Ne contient que les evènements stratégies de groupe

Mais parfois, il peut s’avérer que les informations remontées par ces logs ne soient pas assez précises pour trouver la vraie cause du problème.

Débug avancé

Les messages d’état détaillés

Une première étape concerne l’activation des Messages d’état détaillés sur le poste client.
Ces messages détaillés vont afficher le détail des étapes de démarrage ou d’arrêt d’un poste.
On retrouvera dans ces messages le déroulement de l’application des GPO à l’ouverture d’une session utilisateur.
Ce n’est pas forcément très verbeux mais cette option est utile pour voir sur quelle section l’application des GPO bloque ou prend du temps.
L’activation de ce paramètre se fait par GPO ou GPEdit :

Le fichier gpsvc.log

Une deuxième étape concerne l’activation du fichier gpsvc.log.
Ce fichier va contenir toutes les étapes et tous les détails de l’application des GPO sur un poste, du démarrage du poste au bureau de l’utilisateur.
C’est aussi le cas lors d’un rafraîchissement manuel des GPOs par un GPUpdate.
 
Voici la procédure pour activer ce log :
  1. Ouvrez l’éditeur de registre avec la commande Regedit
  2. Dépliez la clé HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
  3. Crééz une nouvelle clé Diagnostics si elle n’existe pas
  4. Crééz une nouvelle valeur DWORD (32-bit) GPSvcDebugLevel
  5. Modifiez la valeur GPSvcDebugLevel par la valeur 30002 (Hexadecimal)
  6. Fermez le Registre
  7. Crééz le dossier Usermode si celui-ci est absent du dossier C:\Windows\Debug\
  8. Lancez la commande Gpupdate /force
  9. Le fichier gpsvc.log doit se créer

Astuce : Une fois le fichier activé, sur Windows 7/Windows 2008 R2 ou en-dessous, il peut arriver que plusieurs threads concurrents écrivent en même temps dans le fichier, occasionnant des pertes d’informations.
Dans ce cas, il est recommandé de séparer le rafraîchissement des paramètres ordinateurs et utilisateurs avec la commande Gpupdate /force /target:computer ou Gpupdate /force /target:user
 
Une fois le fichier créé, il faut maintenant l’analyser. Ce sera l’objet d’une deuxième partie.
 

Le client Outlook n’arrive plus à accéder à la GAL sur Exchange Server 2013

Problème:

Les clients Outlook n’arrivent plus à accéder à la GAL sur Exchange, et donc les utilisateurs sont dans l’incapacité d’ajouter des salles de réunions ou de rechercher contacts qui ne sont pas dans leur cache Outlook. Le client se fige et le message d’erreur suivant apparait après quelques dizaines de secondes:

Troubleshooting:

  • Vérification des journaux d’événements .
  • Vérification de la réplication AD et Exchange.
  • Régénération de l’OAB et MaJ de la GAL. 
  • Déplacement de la boite mail contenant l’OAB vers un autre serveur.
  • Entrée dans le fichier host pour pointer directement sur le serveur hébergeant l’OAB.
  • Test d’accès sur l’URL EWS et l’URL OAB.
  • Vérification des logs IIS.

 

Solution:

Des erreurs 401 étaient retournées depuis le serveur dans les logs IIS. Pour résoudre cette erreur il a fallu redémarrer les services IIS, puis les services « RPC Client Access » et « MS Exchange Throttling », puis de nouveau redémarrer les services IIS.

 

SCOM – Script Exemple de rapport Cmdline pour un monitor

Le script ci-dessous montre comment facilement sortir de petit rapport en ligne de commande de l’état d’un monitor pour tout les agents.

Dans cet exemple on affiche l’état du rollup monitor de l’espace disque (FreeSpaceMonitorRollup) et l’information de maintenance mode.

 

Function GetLogicDiskFreeSpState 
     
{

     
param(
     
[string]$dataSource = « SQLSERV1\OPSMGR »,
     
[string]$database = « OperationsManager »,
     
[string]$UnitMonitor = « Microsoft.Windows.Server.%.LogicalDisk.FreeSpaceMonitorRollup »,
     
[string]$TypeName = « Microsoft.Windows.Server.%.LogicalDisk »,
     
[string]$sqlCommand = 
     
$(
« 
                                                             
      /* QUERY THAT GET STATE OF SPECIFIC MONITOR STATE FOR ALL COMPUTERS */
      Use $database
                                                                                    
      DECLARE @UnitMonitor VARCHAR(100)
      DECLARE @TypeName VARCHAR(100)
                                           
                       
      SET @UnitMonitor = ‘%’+’$UnitMonitor’+’%’
      SET @TypeName = ‘$TypeName’
                                          
      PRINT ‘MONITOR: ‘ + @UnitMonitor
      PRINT ‘CRITERIAS:’
                                           
     ;
     WITH
                                                       
     MAININFO (Monitor,Computer,Disk,HealthState, LastModified,IsAvailable,InMaintenanceMode)
     AS
     (                                           
      SELECT
      MV.Name as Monitor
     ,MEGV.path as Computer
     ,MEGV.Name as Disk
     ,HealthState = CASE WHEN InMaintenanceMode = ‘0’ OR InMaintenanceMode is null  
        THEN     
            CASE MEGV.IsAvailable
                  WHEN ‘0’ THEN ‘KO – STATE IS NOT AVAILABLE’ — THIS MEAN THAT THE STATE IS GRAYED IN SCOM CONSOLE DESPITE OF THE OBJECT IS NOT IN MAINTENANCE MODE (AGENT FUNCTIONNAL PROBLEM)
                  WHEN ‘1’ THEN
                    CASE SV.[HealthState]
                        WHEN ‘0’ THEN ‘Not Monitored’
                        WHEN ‘1’ THEN ‘OK’
                        WHEN ‘2’ THEN ‘Warning’
                        WHEN ‘3’ THEN ‘Critical’
                    END
                                                   
                END                   
                                                       
            WHEN InMaintenanceMode = ‘1’
        THEN
            CASE MEGV.IsAvailable
            WHEN ‘0’ THEN ‘KO – STATE IS NOT AVAILABLE’ — THIS MEAN THAT THE STATE IS GRAYED IN SCOM CONSOLE DESPITE OF THE OBJECT IS IN MAINTENANCE MODE (AGENT FUNCTIONNAL PROBLEM)
            WHEN ‘1’ THEN
                CASE SV.[HealthState]
                WHEN ‘0’ THEN ‘In Maintenance Mode’
                WHEN ‘1’ THEN ‘OK’
                WHEN ‘2’ THEN ‘Warning’
                WHEN ‘3’ THEN ‘Critical’
                END
                                                       
            END                                                                                           
        END

    ,SV.[LastModified] as LastModified
    ,MEGV.IsAvailable
    ,MEGV.InMaintenanceMode
    FROM [OperationsManager].[dbo].[StateView] SV
    INNER JOIN [dbo].[ManagedEntityGenericView] MEGV on SV.BaseManagedEntityId = MEGV.BaseManagedEntityId
    INNER JOIN [dbo].[MonitorView] MV on SV.MonitorId = MV.id
    INNER JOIN [dbo].[ManagedTypeView] MTV on MEGV.MonitoringClassId = MTV.Id
    WHERE MV.Name like @UnitMonitor
    AND MTV.Name like @TypeName
        )
    SELECT
        
    MAININFO.Monitor
   ,MAININFO.Computer
   ,MAININFO.Disk
   ,MAININFO.HealthState
   ,MAININFO.LastModified
   ,MAININFO.IsAvailable
   ,MAININFO.InMaintenanceMode
    FROM MAININFO
            
   ORDER BY computer,Disk
  « 
    
)

 
)

  $connectionString = « Data Source=$dataSource;  » +
  « Integrated Security=SSPI;  »
+
  « Initial Catalog=$database »

  $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
 
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
 
$command.CommandTimeout=300
 
$connection.Open()

 $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
 
$dataset = New-Object System.Data.DataSet
 
$adapter.Fill($dataSet) | Out-Null

 $connection.Close()

 #Display Time of Query
« `n »
 
write-host « Query Date: $(get-date -Format F) » -NoNewline
« `n »

#Display Criterias
Write-Host « STATE OF MONITOR ` »$UnitMonitor`« : »
« `n »
#Display Nb of rows

write-host Nb Of Object: $($dataset.Tables.defaultview.Count)
« `n »

$dataSet.Tables
}

try
{
GetLogicDiskFreeSpState | ft -AutoSize
}
catch
{
write-host -F Red « ERROR DURING EXECUTION OF GetLogicDiskFreeSpState FUNCTION – CHECK THAT YOU ARE LOGGED WITH A RIGHT ACCOUNT OR THAT THE SQL QUERY IS CORRECT »
}