Author: Not specified Language: powershell
Description: Not specified Timestamp: 2018-03-19 21:17:35 +0000
View raw paste Reply
  1. <#     
  2.         .NOTES
  3.         ===========================================================================
  4.          Created on:    29/11/2016 13:45
  5.          Created by:    David MASSON
  6.          Organization:  Direction du Numérique - Université de Haute Alsace
  7.          Filename:      UserDataManagement.ps1
  8.         ===========================================================================
  9.         .DESCRIPTION
  10.                 A description of the file.
  11. #>
  12.  
  13. # Effacement de la console
  14. clear
  15.  
  16. # Import des modules nécessaires
  17. Import-Module ActiveDirectory
  18. Import-Module DFSN
  19.  
  20. # Fonction de gestion des logs
  21. Function AddLog
  22.     {
  23.     param([string]$User,[string]$LogName,[string]$Source,[string]$EntryType,[string]$EventId,[string]$Category,[string]$Message,[string]$Name,[string]$Path,[string]$FileSystemRights,[string]$AccessControlType,[string]$InheritanceFlags,[string]$PropagationFlags,[string]$Target,[string]$Description,[string]$WrongTarget)
  24.     $Column = New-Object psobject
  25.     $Column | Add-Member -Name User -MemberType NoteProperty -Value $User
  26.         $Column | Add-Member -Name LogName -MemberType NoteProperty -Value $LogName
  27.         $Column | Add-Member -Name Source -MemberType NoteProperty -Value $Source
  28.         $Column | Add-Member -Name EntryType -MemberType NoteProperty -Value $EntryType
  29.     $Column | Add-Member -Name EventId -MemberType NoteProperty -Value $EventId
  30.     $Column | Add-Member -Name Category -MemberType NoteProperty -Value $Category
  31.     $Column | Add-Member -Name Message -MemberType NoteProperty -Value $Message
  32.     $Column | Add-Member -Name Name -MemberType NoteProperty -Value $Name
  33.     $Column | Add-Member -Name Path -MemberType NoteProperty -Value $Path
  34.         $Column | Add-Member -Name FileSystemRights -MemberType NoteProperty -Value $FileSystemRights
  35.         $Column | Add-Member -Name AccessControlType -MemberType NoteProperty -Value $AccessControlType
  36.         $Column | Add-Member -Name InheritanceFlags -MemberType NoteProperty -Value $InheritanceFlags
  37.         $Column | Add-Member -Name PropagationFlags -MemberType NoteProperty -Value $PropagationFlags
  38.         $Column | Add-Member -Name Target -MemberType NoteProperty -Value $Target
  39.         $Column | Add-Member -Name Description -MemberType NoteProperty -Value $Description
  40.         $Column | Add-Member -Name Directory -MemberType NoteProperty -Value $WrongTarget
  41.     return $Column
  42.     }
  43.  
  44. # Variable globale de gestion des logs
  45. $Global:LogTab = @()
  46.  
  47. # Import de la structure de référence
  48. [xml]$XmlDocument = Get-Content -Path C:\DNUM\Scripts\DataStructure.xml
  49.  
  50. # Environnement
  51. $Domain = "labo.local"
  52. $Fileserver1 = "data1"
  53.  
  54. # Unité d'organistion concernées
  55. $DN_DNUM = "OU=AER,OU=DNUM,DC=labo,DC=local"
  56. $DN_SC = "OU=Services_Centraux,DC=labo,DC=local"
  57. $BaseDN = @($DN_DNUM,$DN_SC)
  58.  
  59. Try
  60.         {
  61.         # Démarrage
  62.         $DNumEventLog = "User Data Management"
  63.         Write-EventLog -LogName Application -Source $DNumEventLog -EntryType Information -EventId 0 -Category 0 -Message "UserDataManagement : Démarrage du traitement de la gestion des répertoires personnels"
  64.     if (Test-Path "C:\DNUM\Logs\*")
  65.         {
  66.         Remove-Item "C:\DNUM\Logs\*"
  67.         }
  68.     Else
  69.         {
  70.         }
  71.  
  72.         # Constitution d'une liste d'utilisateurs
  73.         Foreach ($DN in $BaseDN)
  74.                 {
  75.                 $UserList = Get-ADUser -Filter * -SearchBase $DN
  76.  
  77.                 # Traitement par utilisateur
  78.                 foreach ($User in $UserList)
  79.                         {
  80.                         # Effacement des données du tableau de gestion des logs
  81.                         $Global:LogTab.Clear()
  82.  
  83.                         # Définition des propriétés utilisateur
  84.                         $Mail = $User.UserPrincipalName
  85.                         $SamAccountName = $User.SamAccountName
  86.            
  87.             Write-Host "Execution pour"$Mail
  88.  
  89.                         # Gestion de l'arborescence
  90.                         foreach ($Item in $XmlDocument.DataStructureConfiguration.PhysicalFolderDefinition.FolderDef)
  91.                                 {
  92.                                 # Déclaration des variables
  93.                                 $Name = $ExecutionContext.InvokeCommand.ExpandString($Item.Name)
  94.                                 $Path = $ExecutionContext.InvokeCommand.ExpandString($Item.Path)
  95.  
  96.                                 # Audit de l'arborescence
  97.                                 If (Test-Path $Path)
  98.                                         {
  99.                                         $Message = "[INFORMATION] Répertoire présent : " + $Path
  100.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "0" -Category "0" -Message $Message -Name $Name -Path $Path
  101.                                         }
  102.                                 Else
  103.                                         {
  104.                                         $Message = "[WARNING] Répertoire absent : " + $Path + ". Le nouveau répertoire va être créé"
  105.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Warning" -EventId "1" -Category "0" -Message $Message -Name $Name -Path $Path
  106.                                        
  107.  
  108.                                         # Création d'un répertoire
  109.                                         New-Item -ItemType Directory -Path $Path
  110.                                
  111.                                         $Message = "[INFORMATION] Nouveau répertoire crée :" + $Path
  112.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "1" -Category "0" -Message $Message -Name $Name -Path $Path
  113.                                         }
  114.                                 }
  115.                         # Test de restitution des logs par utilisateur
  116.                         #Foreach        ($Event in $LogTab)
  117.                         #       {
  118.                         #       Write-Output $Event.Name | Where-Object {$Event.User -like "user01"} | Out-File C:\DNUM\Logs.txt -Append
  119.                         #       }
  120.  
  121.                         # Gestion des permissions NTFS
  122.                                 # $Path : Chemin du répertoire
  123.                                 # $SamAccountName : UID de l'utilisateur
  124.                                 # $FileSystemRights : Définit les droits d'accès à utiliser lors de la création de règles d'accès et d'audit
  125.                                 # $InheritanceFlags : Indicateurs d’héritage spécifient la sémantique d’héritage des entrées de contrôle d’accès
  126.                                 # $PropagationFlags : Spécifie comment les entrées de contrôle d’accès sont propagées aux objets enfants
  127.                                 # $AccessControlType : Spécifie si la règle de contrôle d'accès est autorisée ou refusée
  128.                         foreach ($Item in $XmlDocument.DataStructureConfiguration.NtfsPermissions.NtfsPermission)
  129.                                 {
  130.                                 # Déclaration des variables
  131.                                 $Name = $ExecutionContext.InvokeCommand.ExpandString($Item.Name)
  132.                                 $Path = $ExecutionContext.InvokeCommand.ExpandString($Item.Path)
  133.                                 $FileSystemRights = $ExecutionContext.InvokeCommand.ExpandString($Item.FileSystemRights)
  134.                                 $AccessControlType = $ExecutionContext.InvokeCommand.ExpandString($Item.AccessControlType)
  135.                                 $InheritanceFlags = $ExecutionContext.InvokeCommand.ExpandString($Item.InheritanceFlags)
  136.                                 $PropagationFlags = $ExecutionContext.InvokeCommand.ExpandString($Item.PropagationFlags)
  137.  
  138.                                 # Audit des permissions NTFS
  139.                                 $AuditAcl = ((Get-Item $Path).GetAccessControl('Access')).Access | Where-Object {$_.IdentityReference -eq "LABO\$SamAccountName"}
  140.                                 if (($AuditAcl.FileSystemRights -eq $FileSystemRights) -and ($AuditAcl.InheritanceFlags -eq $InheritanceFlags) -and ($AuditAcl.PropagationFlags -eq $PropagationFlags) -and ($AuditAcl.AccessControlType -eq $AccessControlType))
  141.                                         {
  142.                                         $Message = "[INFORMATION] Les permissions NFTS sont correctes pour le dossier : " + $Path
  143.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "2" -Category "1" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags
  144.                                         }
  145.                                 Else
  146.                                         {
  147.                                         $Message = "[WARNING] Les permissions NFTS sont incorrectes pour le dossier : " + $Path + ". Les permissions vont étre corrigées"
  148.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Warning" -EventId "3" -Category "1" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags
  149.                                      
  150.                                         # Application des permissions NTFS
  151.                                         $acl = Get-Acl $Path
  152.                                         $acl.Access | Where-Object {$_.IdentityReference -eq "LABO\$SamAccountName"} | ForEach-Object {$acl.RemoveAccessRuleSpecific($_)}
  153.                                         $acl.SetAccessRuleProtection($false,$true)
  154.                                         $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($SamAccountName,$FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
  155.                                         $acl.AddAccessRule($rule)
  156.                                         Set-Acl $Path $acl
  157.  
  158.                                         $Message = "[INFORMATION] Les permissions NFTS ont été modifiées pour le dossier : " + $Path
  159.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "3" -Category "1" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags
  160.                                         }
  161.                                 }
  162.  
  163.                         # Gestion des liens DFS
  164.                         if ([String]::IsNullOrEmpty($(Get-DfsnFolder -Path \\$Domain\Users\$SamAccountName\*)))
  165.                                 {
  166.                                 foreach ($Item in $XmlDocument.DataStructureConfiguration.DfsFolders.DfsFolder)
  167.                                         {
  168.                                         # Déclaration des variables
  169.                                         $Path = $ExecutionContext.InvokeCommand.ExpandString($Item.Path)
  170.                                         $Target = $ExecutionContext.InvokeCommand.ExpandString($Item.Target)
  171.                                         $Description = $ExecutionContext.InvokeCommand.ExpandString($Item.Description)
  172.                                        
  173.                                         $Message = "[WARNING] Le lien DFS : " + $Path + " est manquant pour la cible : " + $Target + ". Le lien va être créé."
  174.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Warning" -EventId "4" -Category "2" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags -Target $Target -Description $Description
  175.  
  176.                                         New-DfsnFolder -Path $Path -TargetPath $Target -EnableTargetFailback $True -Description $Description
  177.  
  178.                                         $Message = "[INFORMATION] Le lien DFS : " + $Path + " a été créé pour la cible : " + $Target
  179.                                         $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "4" -Category "2" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags -Target $Target -Description $Description
  180.                                         }
  181.                                 }
  182.                         Else
  183.                                 {
  184.                                 foreach ($Item in $XmlDocument.DataStructureConfiguration.DfsFolders.DfsFolder)
  185.                                         {
  186.                                         # Déclaration des variables
  187.                                         $Path = $ExecutionContext.InvokeCommand.ExpandString($Item.Path)
  188.                                         $Target = $ExecutionContext.InvokeCommand.ExpandString($Item.Target)
  189.                                         $Description = $ExecutionContext.InvokeCommand.ExpandString($Item.Description)
  190.  
  191.                                         $WrongTarget = (Get-DfsnFolderTarget -Path $Path).TargetPath
  192.                                         if ($WrongTarget -notlike $Target)
  193.                                                 {
  194.                                                 $Message = "[WARNING] La cible : " + $WrongTarget + " du lien DFS : " + $Path + " n'est pas conforme. Cet évènement déclenche le remplacement de la cible par : " + $Target
  195.                                                 $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Warning" -EventId "5" -Category "2" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags -Target $Target -Description $Description -Directory $WrongTarget
  196.                                                
  197.                                                 Remove-DfsnFolderTarget -Path $Path -TargetPath $WrongTarget -Force
  198.                                                 New-DfsnFolder -Path $Path -TargetPath $Target -EnableTargetFailback $True -Description $Description
  199.                                                
  200.                                                 $Message = "[INFORMATION] La cible : " + $WrongTarget + " du lien DFS : " + $Path + " a été remplacée par la cible : " + $Target
  201.                                                 $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "5" -Category "2" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags -Target $Target -Description $Description -Directory $WrongTarget
  202.  
  203.                                                 }
  204.                                         Else
  205.                                                 {
  206.                                                 $Message = "[INFORMATION] Le lien DFS : " + $Path + " ayant pour la cible : " + $Target + " est conforme"
  207.                                                 $LogTab+=AddLog -User $SamAccountName -LogName "Application" -Source $DNumEventLog -EntryType "Information" -EventId "6" -Category "2" -Message $Message -Name $Name -Path $Path -FileSystemRights $FileSystemRights -AccessControlType $AccessControlType -InheritanceFlags $InheritanceFlags -PropagationFlags $PropagationFlags -Target $Target -Description $Description -Directory $WrongTarget
  208.                                                 }
  209.                                         }
  210.                                 }
  211.             # Début de génération des Logs
  212.                         # Fichiers de Log dans C:\DNUM\Logs
  213.                         Write-Output "Courriel : $Mail" | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  214.             Write-Output "ARBORESCENCE :" | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  215.             Foreach     ($Event in $LogTab)
  216.                                 {
  217.                 Write-Output $Event.Message | Where-Object {$Event.User -like $SamAccountName} | Where-Object {$Event.Category -like "0"} | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  218.                                 }
  219.             Write-Output "PERMISSIONS NTFS :" | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  220.             Foreach     ($Event in $LogTab)
  221.                                 {
  222.                 Write-Output $Event.Message | Where-Object {$Event.User -like $SamAccountName} | Where-Object {$Event.Category -like "1"} | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  223.                                 }
  224.             Write-Output "LIENS DFS :" | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  225.             Foreach     ($Event in $LogTab)
  226.                                 {
  227.                 Write-Output $Event.Message | Where-Object {$Event.User -like $SamAccountName} | Where-Object {$Event.Category -like "2"} | Out-File "C:\DNUM\Logs\$SamAccountName.txt" -Append
  228.                                 }
  229.             # Observateur d'évènement
  230.             Foreach     ($Event in $LogTab)
  231.                                 {
  232.                 if ($Event.EntryType -eq "Warning")
  233.                     {
  234.                     Write-Host $Event.Message
  235.                     Write-EventLog -LogName $Event.LogName -Source $Event.Source -EntryType $Event.EntryType -EventId $Event.EventId -Category $Event.Category -Message $Event.Message
  236.                     }
  237.                 }
  238.             # Courriel d'alerte
  239.  
  240.             # Fin de génération des Logs
  241.                         }
  242.                 }
  243.         }
  244. Catch
  245.         {
  246.         $Message = "UserDataManagement : Exception : " + $_.Exception.Message + " / " + $_.Exception.ItemName
  247.     Write-EventLog -LogName Application -Source $DNumEventLog -EntryType Error -EventId 0 -Category 0 -Message $Message
  248.         Write-Host $Message
  249.     }
  250. Finally
  251.         {
  252.         Write-EventLog -LogName Application -Source $DNumEventLog -EntryType Information -EventId 0 -Category 0 -Message "UserDataManagement : fin du traitement de la gestion des répertoires personnels"
  253.         }
View raw paste Reply