From a1053c83f4721295c0c7dece0e47f1441875613a Mon Sep 17 00:00:00 2001 From: Alin Date: Tue, 21 Jul 2026 06:28:42 +0000 Subject: [PATCH] =?UTF-8?q?Neu=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Active_Directory/H_Laufwerk_entfernen.ps1 | 120 ++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/Active_Directory/H_Laufwerk_entfernen.ps1 b/Active_Directory/H_Laufwerk_entfernen.ps1 index e69de29..7ec78c9 100644 --- a/Active_Directory/H_Laufwerk_entfernen.ps1 +++ b/Active_Directory/H_Laufwerk_entfernen.ps1 @@ -0,0 +1,120 @@ +<# +.SYNOPSIS + Entfernt das H-Laufwerk (Home-Drive) bei Benutzern in bestimmten OUs + und aktualisiert das Beschreibungsfeld inklusive Logging. +.DESCRIPTION + Das Skript durchläuft ein Array von OUs, sucht alle aktiven Benutzer, + entfernt die Attribute 'HomeDirectory' und 'HomeDrive' (H:) und + ergänzt das 'Description'-Feld um einen Zeitstempel. +#> + +# --- KONFIGURATION --- +# Hier die OUs eintragen. Am sichersten sind vollständige Distinguished Names (DN). +# Beispiel für Kurznamen/Suchbegriffe siehe Filter unten im Skript. +$OUList = @( + "OU=NNG,OU=Users,OU=N-Tree,DC=n-ad,DC=n-ergie, OU=NSG,OU=Users,OU=N-Tree,DC=n-ad,DC=n-ergie" +) + +# Pfad für das Logfile +$LogPath = "C:\Temp\H_Laufwerk\Logs" +$LogFile = Join-Path $LogPath "H-Laufwerk_Entfernung_$(Get-Date -Format 'yyyy-MM-dd').log" + +# SICHERHEITS-SCHALTER (Safety First) +# $true = Es wird nur simuliert und geloggt, was passieren WÜRDE. +# $false = Die Änderungen werden direkt ins Active Directory geschrieben! +$WhatIfMode = $true + +# --- FUNKTIONEN --- +Function Write-Log { + Param ( + [string]$Message, + [ValidateSet("INFO", "SUCCESS", "WARNING", "ERROR")] + [string]$Type = "INFO" + ) + $TimeStamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + $LogLine = "[$TimeStamp] [$Type] $Message" + + # Konsole-Ausgabe (farblich angepasst) + switch ($Type) { + "SUCCESS" { Write-Host $LogLine -ForegroundColor Green } + "WARNING" { Write-Host $LogLine -ForegroundColor Yellow } + "ERROR" { Write-Host $LogLine -ForegroundColor Red } + default { Write-Host $LogLine -ForegroundColor Cyan } + } + + # In Datei schreiben + $LogLine | Out-File -FilePath $LogFile -Append -Encoding utf8 +} + +# --- INITIALISIERUNG --- +if (-not (Test-Path $LogPath)) { + New-Item -ItemType Directory -Path $LogPath -Force | Out-Null +} + +Write-Log "=== Skriptstart (WhatIf-Modus = $WhatIfMode) ===" "INFO" + +# AD-Modul prüfen +if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) { + Write-Log "Das ActiveDirectory-Modul ist nicht installiert!" "ERROR" + Exit +} +Import-Module ActiveDirectory + +# Das aktuelle Datum für die Beschreibung generieren +$CurrentDate = Get-Date -Format "dd.MM.yyyy" +$AppendText = "H Laufwerk wurde entfernt Datum $CurrentDate" + +# --- HAUPTTEIL --- +foreach ($OU in $OUList) { + Write-Log "Verarbeite OU: $OU" "INFO" + + try { + # Alle Benutzer aus der aktuellen OU abrufen, die ein HomeDirectory gesetzt haben + $Users = Get-ADUser -SearchBase $OU -SearchScope Subtree -Filter * -Properties Description, HomeDirectory, HomeDrive + } + catch { + Write-Log "Fehler beim Lesen der OU '$OU': $_" "ERROR" + continue + } + + if ($null -eq $Users -or $Users.Count -eq 0) { + Write-Log "Keine Benutzer in der OU '$OU' gefunden." "WARNING" + continue + } + + foreach ($User in $Users) { + # Prüfen, ob überhaupt ein H-Laufwerk oder HomeDirectory vorhanden ist + if ([string]::IsNullOrEmpty($User.HomeDirectory) -and [string]::IsNullOrEmpty($User.HomeDrive)) { + Write-Log "Benutzer $($User.SamAccountName): Kein H-Laufwerk konfiguriert. Überspringe." "INFO" + continue + } + + # Neue Beschreibung zusammensetzen (bestehende Beschreibung beibehalten) + $NewDescription = if ([string]::IsNullOrEmpty($User.Description)) { + $AppendText + } else { + "$($User.Description) | $AppendText" + } + + # Log-Eintrag für die Aktion vorbereiten + $ActionMsg = "Benutzer $($User.SamAccountName) - Entferne Pfad: '$($User.HomeDirectory)' ($($User.HomeDrive)) | Neue Beschreibung: '$NewDescription'" + + try { + if ($WhatIfMode) { + Write-Log "[WHAT-IF] $ActionMsg" "INFO" + } else { + # Änderungen scharf durchführen + Set-ADUser -Identity $User.SamAccountName ` + -Clear "HomeDirectory", "HomeDrive" ` + -Description $NewDescription + + Write-Log "Erfolgreich angepasst: $($User.SamAccountName)" "SUCCESS" + } + } + catch { + Write-Log "Fehler beim Verarbeiten von $($User.SamAccountName): $_" "ERROR" + } + } +} + +Write-Log "=== Skript beendet ===" "INFO" \ No newline at end of file