Last active
February 19, 2026 19:28
-
-
Save Rapidhands/5ca3e7eb7c41e1f1210d2db4cb3fbab7 to your computer and use it in GitHub Desktop.
Log in the share path and in the EventLog "Application" the User "s logoff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ============================================================ | |
| # Log-UserLogoff.ps1 | |
| # À déployer en tant que script de déconnexion (GPO ou autre) | |
| # Recherche dans le fichier centralisé la ligne contenant | |
| # $UserName et $MachineName et la remplace par une ligne | |
| # de déconnexion. | |
| # ============================================================ | |
| # ── CONFIGURATION ──────────────────────────────────────────── | |
| $SharePath = "\\SERVEUR\Partage\Logs" # <-- Modifier selon votre environnement | |
| $LogFile = Join-Path $SharePath "connexions.log" | |
| # ───────────────────────────────────────────────────────────── | |
| # Collecte des informations | |
| $UserName = $env:USERNAME | |
| $MachineName = $Env:ComputerName | |
| $DateTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" | |
| # Construction de la nouvelle ligne | |
| $NewEntry = "$DateTime | $UserName s'est déconnecté de $MachineName" | |
| try { | |
| if (-not (Test-Path $LogFile)) | |
| { | |
| throw "Le fichier de log est introuvable : $LogFile" | |
| } | |
| $Mutex = New-Object System.Threading.Mutex($false, "Global\LogonLogMutex") | |
| $acquired = $Mutex.WaitOne(500) | |
| try { | |
| # Lecture de toutes les lignes | |
| $Lines = Get-Content -Path $LogFile -Encoding UTF8 | |
| $Replaced = $false | |
| # Remplacement de la ligne correspondant à cet utilisateur sur cette machine | |
| # On recherche une ligne qui contient à la fois $UserName ET $MachineName | |
| $UpdatedLines = $Lines | ForEach-Object { | |
| if (-not $Replaced -and $_ -match [regex]::Escape($UserName) -and $_ -match [regex]::Escape($MachineName)) | |
| { | |
| $NewEntry # On remplace la ligne trouvée | |
| $Replaced = $true | |
| } | |
| else | |
| { | |
| $_ # On conserve les autres lignes intactes | |
| } | |
| } #end Foreac-object | |
| if (-not $Replaced) | |
| { | |
| # Aucune ligne de connexion trouvée : on ajoute quand même une trace | |
| $UpdatedLines = $Lines + "$DateTime | $UserName s'est déconnecté de $MachineName (aucune connexion trouvée)" | |
| Write-EventLog -LogName "Application" ` | |
| -Source "Application" ` | |
| -EventId 9998 ` | |
| -EntryType Warning ` | |
| -Message "Log-UserLogoff.ps1 : Aucune ligne de connexion trouvée pour $UserName sur $MachineName" | |
| } # end if | |
| # Réécriture complète du fichier | |
| Set-Content -Path $LogFile -Value $UpdatedLines -Encoding UTF8 | |
| }# end try | |
| finally { | |
| # On libère le mutex dans tous les cas (même si une erreur survient) | |
| if ($acquired) | |
| { | |
| $Mutex.ReleaseMutex() | |
| } | |
| $Mutex.Dispose() | |
| }#end finnaly | |
| } # end try | |
| catch | |
| { | |
| $ErrorMsg = "Log-UserLogoff.ps1 : Erreur lors de la mise à jour de $LogFile. Erreur : $_" | |
| Write-EventLog -LogName "Application" ` | |
| -Source "Application" ` | |
| -EventId 9999 ` | |
| -EntryType Warning ` | |
| -Message $ErrorMsg | |
| }#end catch |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment