Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
gporeport [2019/02/19 11:46] – [Script principal] nekangporeport [2021/03/05 16:13] (Version actuelle) nekan
Ligne 1: Ligne 1:
-====== Get-DomainPcGpoReport - Obtenir un rapport de déploiement des GPO ======+====== Get-DomainPcGpoReport - Créer un rapport de déploiement de GPO ====== 
 +<label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/02/19 21:49//
  
 Un jour, mon responsable m'a demandé un rapport sur le déploiement de certaines GPO. Je me suis dit qu'il suffisait d'interroger l'AD pour avoir ces informations et là, stupeur, après quelques recherches, je me rends compte que l'AD ne les fournit pas. Un jour, mon responsable m'a demandé un rapport sur le déploiement de certaines GPO. Je me suis dit qu'il suffisait d'interroger l'AD pour avoir ces informations et là, stupeur, après quelques recherches, je me rends compte que l'AD ne les fournit pas.
Ligne 18: Ligne 19:
 ===== Script principal ===== ===== Script principal =====
  
-<code powershell>+<sxh powershell>
 ################################################################################################## ##################################################################################################
-+#                                                                                                
-# Script de vérification de synchronisation des postes avec le contrôleur de domaine +# Script de vérification de synchronisation des postes avec le contrôleur de domaine             # 
-+#                                                                                                
-# Par Nicolas THOREZ +# Par Nicolas THOREZ                                                                             # 
-#+#                                                                                                #
 ################################################################################################## ##################################################################################################
  
Ligne 36: Ligne 37:
 $LastSyncFile = "C:\Scripts\GPO Report\lastsync.csv" $LastSyncFile = "C:\Scripts\GPO Report\lastsync.csv"
  
-# Création de la liste des PS en se basant sur l'AD+# Création de la liste des PC en se basant sur l'AD
 $ListPC = (Get-ADComputer -SearchBase "OU=PC Fixe,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name $ListPC = (Get-ADComputer -SearchBase "OU=PC Fixe,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name
 $ListPC += (Get-ADComputer -SearchBase "OU=PC Portable,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name $ListPC += (Get-ADComputer -SearchBase "OU=PC Portable,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name
Ligne 176: Ligne 177:
     {     {
         $TempVar = @{}         $TempVar = @{}
-        $TempVar | Export-Csv -Path $LastSyncFile -Delimiter ';'+        $TempVar | Export-Csv -Path $LastSyncFile -Delimiter ";"
     }     }
  
Ligne 221: Ligne 222:
  
                 # Récupération de la dernière synchronisation                 # Récupération de la dernière synchronisation
-                $GPOTime = ($Results.DocumentElement.UserResults.ExtensionStatus | Where-Object {$_.Name -eq 'Infrastructure de stratégie de groupe'}).BeginTime+                $GPOTime = ($Results.DocumentElement.UserResults.ExtensionStatus | Where-Object {$_.Name -eq "Infrastructure de stratégie de groupe"}).BeginTime
                 $LastSyncTime = [String](Get-Date $GPOTime).ToShortDateString() + " " + [String](Get-Date $GPOTime).ToShortTimeString()                 $LastSyncTime = [String](Get-Date $GPOTime).ToShortDateString() + " " + [String](Get-Date $GPOTime).ToShortTimeString()
                 Set-LastSync $PCName $LastSyncTime                 Set-LastSync $PCName $LastSyncTime
                                  
                 # Vérification pour la GPO (P:)_Personal_Folder_Mapping                 # Vérification pour la GPO (P:)_Personal_Folder_Mapping
-                $PDriveGpoStatus = Get-GPOState('(P:)_Personal_Folder_Mapping')+                $PDriveGpoStatus = Get-GPOState("(P:)_Personal_Folder_Mapping")
  
                 # Vérification pour la GPO BackupUsers_Xcopy_Daily_scheduled                 # Vérification pour la GPO BackupUsers_Xcopy_Daily_scheduled
-                $BackupGpoStatus = Get-GPOState('BackupUsers_Xcopy_Daily_scheduled')+                $BackupGpoStatus = Get-GPOState("BackupUsers_Xcopy_Daily_scheduled")
                                  
                 # Vérification pour la GPO Stratégie de groupe locale                 # Vérification pour la GPO Stratégie de groupe locale
-                $LocalGpoStatus = Get-GPOState('Stratégie de groupe locale')+                $LocalGpoStatus = Get-GPOState("Stratégie de groupe locale")
  
                 # Vérification pour la GPO (Z:)_Shared_Folder                 # Vérification pour la GPO (Z:)_Shared_Folder
-                $ZDriveGpoStatus = Get-GPOState('(Z:)_Shared_Folder')+                $ZDriveGpoStatus = Get-GPOState("(Z:)_Shared_Folder")
  
                 # Vérification pour la GPO Default Domain Policy                 # Vérification pour la GPO Default Domain Policy
-                $DefaultGpoStatus = Get-GPOState('Default Domain Policy')+                $DefaultGpoStatus = Get-GPOState("Default Domain Policy")
  
                 # Ajoute une ligne au rapport et passe à la suite de la boucle                 # Ajoute une ligne au rapport et passe à la suite de la boucle
Ligne 252: Ligne 253:
     }     }
  
-</code>+</sxh> 
 + 
 +===== Script d'interprétation pour Nagios ===== 
 + 
 +<sxh powershell> 
 +################################################################################## 
 +#                                                                                # 
 +#  Vérification des résultats de Get-DomainPcGpoReport.ps1 pour alerte Nagios    # 
 +#                                                                                # 
 +#  Par Nicolas THOREZ                                                            # 
 +#                                                                                # 
 +################################################################################## 
 + 
 +# Déclaration des variables 
 + 
 +$ListPC = (Get-ADComputer -SearchBase "OU=PC Fixe,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name 
 +$ListPC += (Get-ADComputer -SearchBase "OU=PC Portable,OU=Ordinateurs,DC=TEST,DC=LOCAL" -Filter *).Name 
 +$ListPC += (Get-ADComputer -SearchBase "OU=Ordinateurs,OU=Direction,DC=TEST,DC=LOCAL" -Filter *).Name 
 +$SyncTimeData = Import-Csv -Path "C:\Scripts\GPO Report\lastsync.csv" -Delimiter ';' 
 +$ReportData = Import-Csv -Path "C:\Scripts\GPO Report\Report.csv" -Delimiter ';' 
 +$OutputMessage = '' 
 +$OutputMessageCore = '' 
 +$ExitCode = 3 
 +$CheckTime = Get-Date 
 +$NeverSyncError = '' 
 +$NoSyncSinceError = '' 
 +$MaxSyncDelta = 7       # jours 
 +$PDriveError = '' 
 +$ZDriveError = '' 
 +$LocalGpoError = '' 
 +$BackupError = '' 
 +$DefaultGpoError = '' 
 + 
 +# Déclaration des fonctions 
 + 
 +Function Add-MessageData 
 +    { 
 +        param( 
 +            [parameter(position=0)] 
 +            [String]$Message, 
 +            [parameter(position=1)] 
 +            [String]$PC 
 +        ) 
 +        If ($Message -eq ''
 +            { 
 +                $Message = "$PC" 
 +            } 
 +        Else 
 +            { 
 +                $Message += ", $PC" 
 +            } 
 +        Return $Message 
 +    } 
 + 
 + 
 +# Vérification de la dernière synchronisation 
 +Foreach ($PC in $ListPC) 
 +    { 
 +        If ($SyncTimeData.$PC -eq "n/a"
 +            { 
 +                $NeverSyncError = (Add-MessageData $NeverSyncError $PC) 
 +            } 
 +        Else 
 +            { 
 +                $Delta = Get-Date 
 +                $SyncTime = $SyncTimeData.$PC 
 +                $Delta = $CheckTime - (Get-Date $SyncTime) 
 +                If ($Delta.Days -ge $MaxSyncDelta) 
 +                    { 
 +                        $NoSyncSinceError = (Add-MessageData $NoSyncSinceError $PC) 
 +                    } 
 +            } 
 +    } 
 + 
 +# Vérification de l'état de chaque GPO 
 +Foreach ($PC in $ReportData) 
 +    { 
 +        # Initialisation des variables du CSV 
 +        $PCName = $PC.PC 
 +        $OnlineStatus = $PC.Online 
 +        $PStatus = $PC."(P:)_Personal_Folder_Mapping" 
 +        $BackupStatus = $PC."BackupUsers_Xcopy_Daily_scheduled" 
 +        $LocalStatus = $PC."Stratégie de groupe locale" 
 +        $ZStatus = $PC."(Z:)_Shared_Folder" 
 +        $DefaultStatus = $PC."Default Domain Policy" 
 + 
 +        # Passage à la boucle suivante pour les PC hors ligne 
 +        If ($OnlineStatus -eq "False"
 +            { 
 +                continue 
 +            } 
 +         
 +        # Vérification des valeurs 
 +        If ($PStatus -ne "true"
 +            { 
 +                $PDriveError = (Add-MessageData $PDriveError $PCName) 
 +            } 
 +        If ($BackupStatus -ne "true"
 +            { 
 +                $BackupError = (Add-MessageData $BackupError $PCName) 
 +            } 
 +        If ($LocalStatus -ne "true"
 +            { 
 +                $LocalGpoError = (Add-MessageData $LocalGpoError $PCName) 
 +            } 
 +        If ($ZStatus -ne "true"
 +            { 
 +                $ZDriveError = (Add-MessageData $ZDriveError $PCName) 
 +            } 
 +        If ($DefaultStatus -ne "true"
 +            { 
 +                $DefaultGpoError = (Add-MessageData $DefaultGpoError $PCName) 
 +            } 
 +    } 
 + 
 +# Renvoie des valeurs dans Nagios 
 + 
 +If ($PDriveError -ne ''
 +    { 
 +        $PDriveError = "P Drive Error : " + $PDriveError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $PDriveError) 
 +        $ExitCode = 1 
 +    } 
 +If ($BackupError -ne ''
 +    { 
 +        $BackupError = "Backup Error : " + $BackupError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $BackupError) 
 +        $ExitCode = 1 
 +    } 
 +If ($LocalGpoError -ne ''
 +    { 
 +        $LocalGpoError = "Local Policy Error : " + $LocalGpoError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $LocalGpoError) 
 +        $ExitCode = 1 
 +    } 
 +If ($ZDriveError -ne ''
 +    { 
 +        $ZDriveError = "Z Drive Error : " + $ZDriveError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $ZDriveError) 
 +        $ExitCode = 1 
 +    } 
 +If ($DefaultGpoError -ne ''
 +    { 
 +        $DefaultGpoError = "Default Domain Policy Error : " + $DefaultGpoError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $DefaultGpoError) 
 +        $ExitCode = 1 
 +    } 
 +If ($NeverSyncError -ne ''
 +    { 
 +        $NeverSyncError = "Never Synchronised : " + $NeverSyncError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $NeverSyncError) 
 +        $ExitCode = 2 
 +    } 
 +If ($NoSyncSinceError -ne ''
 +    { 
 +        $NoSyncSinceError = "No Synchronization since $MaxSyncDelta days : " + $NoSyncSinceError 
 +        $OutputMessageCore = (Add-MessageData $OutputMessageCore $NoSyncSinceError) 
 +        $ExitCode = 2 
 +    } 
 +If ($OutputMessageCore -eq ''
 +    { 
 +        $ExitCode = 0 
 +    } 
 +If ($ExitCode -eq 2) 
 +    { 
 +        $OutputMessage = "CRITICAL - $OutputMessageCore" 
 +        echo $OutputMessage 
 +        exit $ExitCode 
 +    } 
 +Elseif ($ExitCode -eq 1) 
 +    { 
 +        $OutputMessage = "WARNING - $OutputMessageCore" 
 +        echo $OutputMessage 
 +        exit $ExitCode 
 +    } 
 +Elseif ($ExitCode -eq 0) 
 +    { 
 +        echo "OK - All GPO Applied" 
 +        exit $ExitCode 
 +    } 
 +Else 
 +    { 
 +        echo "UNKNOWN - no data to compute" 
 +        exit $ExitCode 
 +    } 
 + 
 +</sxh>
    
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • gporeport.1550573193.txt.gz
  • Dernière modification : 2019/02/19 09:46
  • (modification externe)