Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me…
    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – Erläuterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

Powershell: Onpremise-Gruppenmitgliedschaften nach Datum entfernen

Posted on 14. Mai 202512. Mai 2025 By Daniel Lensing Keine Kommentare zu Powershell: Onpremise-Gruppenmitgliedschaften nach Datum entfernen

Ich hatte die Problematik, dass während eines Projektes Gruppenberechtigungen datumsgesteuert entfernt werden sollten. Während des Projektes wurden mehrere Gruppen definiert, bei der Gruppenmitgliedschaften verarbeitet werden sollten.

Entsprechend wurden CSV-Dateien generiert als Grundlage für die Verarbeitung:

SamAccountName;ExpiryDate
jdoe;2025-05-12
asmith;2025-06-01

Die Dateien haben als Definition die folgende Struktur:

GroupExpLeave_<Gruppenname>.csv

Mit dem nun folgenden Skript werden die Mitglieder der Gruppen ermittelt und geprüft, ob das Ablaufdatum erreicht ist. Wenn dieses der Fall ist, wird der User aus der Mitgliedschaft entfernt.


# Verzeichnis mit den CSV-Dateien
$csvDirectory = "C:\CSC-Pfad"
$csvFiles = Get-ChildItem -Path $csvDirectory -Filter "GroupExpLeave_*.csv"

# Logdatei mit Tagesdatum
$logDate = Get-Date -Format "yyyy-MM-dd"
$logPath = Join-Path -Path $csvDirectory -ChildPath "GroupExpLeave_$logDate.log"

# Hashtable für Gruppenmitgliedschaften
$groupCache = @{}

foreach ($file in $csvFiles) {
    # Gruppennamen aus dem Dateinamen extrahieren
    if ($file.Name -match "^GroupExpLeave_(.+?)\.csv$") {
        $groupName = $matches[1]
        $csvPath = $file.FullName

        # CSV mit Semikolon einlesen
        $members = Import-Csv -Path $csvPath -Delimiter ";"
        $today = Get-Date
        $remainingMembers = @()

        # Gruppenmitglieder einmalig abrufen und cachen
        if (-not $groupCache.ContainsKey($groupName)) {
            try {
                $groupCache[$groupName] = Get-ADGroupMember -Identity $groupName | Select-Object -ExpandProperty SamAccountName
            } catch {
                Add-Content -Path $logPath -Value "[$(Get-Date)] Error Requesting GroupMembers $groupName: $_"
                continue
            }
        }

        $cachedMembers = $groupCache[$groupName]

        foreach ($member in $members) {
            $expiryDate = Get-Date $member.ExpiryDate

            if ($expiryDate -lt $today) {
                if ($cachedMembers -contains $member.SamAccountName) {
                    try {
                        Remove-ADGroupMember -Identity $groupName -Members $member.SamAccountName -Confirm:$false
                        Add-Content -Path $logPath -Value "[$(Get-Date)] User $($member.SamAccountName) from $groupName removed (Ablaufdatum: $expiryDate)."
                    } catch {
                        Add-Content -Path $logPath -Value "[$(Get-Date)] Error on removing user $($member.SamAccountName) from $groupName: $_"
                        $remainingMembers += $member
                    }
                } else {
                    Add-Content -Path $logPath -Value "[$(Get-Date)] User $($member.SamAccountName) is not member of group $groupName – ignored."
                }
            } else {
                $remainingMembers += $member
            }
        }

        # Aktualisierte CSV-Datei schreiben
        $remainingMembers | Export-Csv -Path $csvPath -Delimiter ";" -NoTypeInformation -Encoding UTF8
        Add-Content -Path $logPath -Value "[$(Get-Date)] CSV-File $($file.Name) was created"
    }
}

Die angewandte Datei für die jeweilige Gruppe wird mit den noch gültigen Benutzern nach deren Prüfung neu erstellt. Es ist bei der Einplanung des Tasks darauf zu achten, dass zu dem Zeitpunkt auf die Steuer-Dateien nicht zugegriffen wird.

Powershell, Programmierung, Server, Windows Server 2019, Windows Server 2022, Windows Server 2025

Beitrags-Navigation

Previous Post: Payback-Punkte zu Miles & More transferieren
Next Post: Powershell: Ist ein Kennwort bei „Have I Been Pwned“ bekannt?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Client (231)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (56)
    • Windows 11 (17)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (55)
    • Auto (17)
    • Bahn (17)
    • Beinarbeit (5)
    • Flugzeug (3)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (193)
    • #t2dhero (46)
    • Arbeitszimmer (26)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (77)
    • Gesundheit (29)
    • Internet (4)
    • Lebensmittel & Essen (21)
    • Lesestoff (18)
    • Sport (10)
    • Veranstaltung (3)
  • Lehren & Lernen (48)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (3)
    • Zertifizierung (42)
  • Programme (318)
    • Android-Apps (27)
    • Eigene Tools (11)
    • iOS-Apps (6)
    • Office (85)
    • Patchday+Updates (71)
    • Software (145)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (90)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (59)
    • VB.NET (8)
    • VBA (10)
    • VBS (10)
  • Server (159)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (92)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (18)
    • Windows Server 2022 (15)
    • Windows Server 2025 (8)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme