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

Kategorie: Server

Gruppenrichtlinien & Loopback

Posted on 22. Juli 202520. Juli 2025 By Daniel Lensing Keine Kommentare zu Gruppenrichtlinien & Loopback

Die Gruppenrichtlinienverarbeitung ist ein zentraler Bestandteil der Windows-basierten Netzwerkverwaltung – und wenn du mit Terminalservern oder spezialisierten Konfigurationsszenarien arbeitest, begegnet dir früher oder später das mysteriöse „Loopback“-Verarbeitungsmodell.

Was ist die Loopbackverarbeitung?

Die Loopbackverarbeitung ist ein spezieller Modus in der Gruppenrichtlinienverwaltung von Windows, bei dem die Benutzerrichtlinien nicht wie ĂĽblich aus dem Benutzerobjekt im Active Directory, sondern aus dem Computerkontext bezogen werden.

Das bedeutet: Wenn sich ein Benutzer an einem bestimmten Computer anmeldet, gelten fĂĽr ihn Benutzereinstellungen, die eigentlich dem Computer zugeordnet sind. Als Ziel der Verarbeitung isteine einheitliche Benutzerkonfigurationen auf bestimmten Geräten – unabhängig davon, wer sich anmeldet – definiert.

Wann wird dieses eingesetzt?

Typische Szenarien sind:

  • Terminalserver / Remote Desktop Sessions
    Jeder Benutzer soll auf dem Terminalserver dieselbe Umgebung vorfinden, z. B. gleiches Startmenü, deaktivierter Zugriff auf Einstellungen etc.
  • Ă–ffentliche Rechner oder Schulungs-PCs
    Benutzer sollen nur eingeschränkte Funktionen sehen, unabhängig von ihren AD-Rechten.
  • Kiosksysteme oder POS-Geräte
    Das Gerät soll immer gleich konfiguriert sein, z. B. ein Single-App-Modus oder beschränkter Zugriff auf Systemfunktionen.
  • Strukturen bei denen die Userobjekte nicht bei den Computerobjekten abgelegt sind
    Es kann Infrastrukturvorgaben geben, bei denen die Benutzer nicht in der selben Struktur der Computer-Objekte verankert sind.

Technische Umsetzung in der Gruppenrichtlinie

Um die Loopbackverarbeitung zu aktivieren:

  1. Ă–ffne den Gruppenrichtlinieneditor fĂĽr das gewĂĽnschte Computerkonto (GPO verknĂĽpft mit dem Computer-OU).
  2. Navigiere zu:
    Computerkonfiguration > Administrative Vorlagen > System > Gruppenrichtlinie
  3. Aktiviere die Einstellung „Gruppenrichtlinien-Verarbeitung für Benutzer konfigurieren“ (Loopback).

Du hast zwei Optionen:

ModusBeschreibung
ZusammenfĂĽhren (Merge)Benutzer-Richtlinien aus dem AD plus Computer-basierte Benutzerrichtlinien werden kombiniert. Bei Konflikten gewinnt die Computerrichtlinie.
Ersetzen (Replace)Benutzer-Richtlinien aus dem Benutzerobjekt werden ignoriert. Es gelten nur die benutzerspezifischen Einstellungen aus dem Computerkontext.

Was passiert bei der Verarbeitung?

In normalen Szenarien verarbeitet Windows GPOs in folgender Reihenfolge:

  1. Lokale Richtlinien
  2. Site-Richtlinien
  3. Domänenrichtlinien
  4. OU-Richtlinien (von oben nach unten)

Mit aktivierter Loopbackverarbeitung wird diese Reihenfolge für Benutzerrichtlinien überschrieben – es gelten die Benutzer-GPOs aus dem Computerkontext, unabhängig von der Benutzer-OU.

Wichtige Hinweise

  • Loopbackverarbeitung beeinflusst nur die Benutzerrichtlinien, nicht die Computereinstellungen.
  • Testen ist Pflicht! Gerade beim Replace-Modus kann es zu ĂĽberraschenden Einschränkungen kommen.
  • Reihenfolge beachten: GPOs mĂĽssen korrekt verknĂĽpft und priorisiert sein, sonst greifen die Richtlinien nicht wie gewĂĽnscht.

Zusammenfassend

Die Loopbackverarbeitung ist ein mächtiges Werkzeug für Administratoren, die auf bestimmte Rechnerumgebungen standardisierte Benutzererfahrungen durchsetzen möchten. Ob Terminalserver, Schulungsraum, Infoterminal oder struktureller Anforderung – mit gezieltem Einsatz der Loopbackrichtlinie lassen sich komplexe Anforderungen elegant umsetzen.

Client, Server, Windows 10, Windows 11, Windows Server 2019, Windows Server 2022, Windows Server 2025

Gruppenverwaltete Dienstkonten (gMSA)

Posted on 23. Mai 202521. Mai 2025 By Daniel Lensing Keine Kommentare zu Gruppenverwaltete Dienstkonten (gMSA)

In der modernen IT-Infrastruktur spielen Sicherheit und Automatisierung eine entscheidende Rolle. Eine der oft übersehenen, aber äußerst nützlichen Funktionen in Windows-Umgebungen sind gruppenverwaltete Dienstkonten (gMSA). Diese speziellen Konten bieten eine sichere und automatisierte Möglichkeit, Dienstkonten zu verwalten, ohne dass Administratoren sich um regelmäßige Kennwortänderungen kümmern müssen.

Was sind gMSA?

Gruppenverwaltete Dienstkonten (gMSA) sind eine Erweiterung der verwalteten Dienstkonten (MSA), die mit Windows Server 2008 R2 eingeführt wurden. Während ein einfaches verwaltetes Dienstkonto (sMSA) nur für einen einzelnen Server genutzt werden kann, ermöglichen gMSA die Verwendung eines Dienstkontos auf mehreren Servern innerhalb einer Domäne.

Ein gMSA bietet eine automatische Kennwortverwaltung, da das System das Kennwort regelmäßig ändert, ohne dass Administratoren eingreifen müssen. Dies erhöht die Sicherheit, da das Passwort nicht manuell gespeichert oder weitergegeben wird, und vereinfacht die Verwaltung, da ein einzelnes Dienstkonto für mehrere Systeme genutzt werden kann.

Vorteile von gMSA

Die Verwendung von gMSA bringt zahlreiche Vorteile mit sich. Besonders hervorzuheben ist die automatische Kennwortverwaltung, die durch das Active Directory gewährleistet wird. Dies reduziert das Risiko statischer Kennwörter erheblich und macht es unnötig, manuelle Änderungen durchzuführen.

Ein weiterer großer Vorteil liegt in der erhöhten Sicherheit. Da Administratoren die Kennwörter nicht verwalten müssen, entfällt die Gefahr, dass sie versehentlich weitergegeben oder kompromittiert werden. Zudem erleichtert die zentrale Verwaltung die Nutzung und Wartung von Dienstkonten in größeren IT-Umgebungen, da ein gMSA von mehreren Servern innerhalb einer Domäne verwendet werden kann.

Einschränkungen von gMSA

Trotz der zahlreichen Vorteile gibt es einige Einschränkungen, die bei der Implementierung von gMSA berücksichtigt werden müssen. Diese Konten sind nur mit Windows Server 2012 und neuer kompatibel. Unternehmen mit älteren Windows-Versionen können gMSA nicht verwenden und müssten auf alternative Lösungen zurückgreifen.

Ein wichtiger Punkt ist zudem, dass gMSA nicht für interaktive Anmeldungen genutzt werden können. Sie sind ausschließlich für Dienste und Anwendungen vorgesehen, sodass eine direkte Anmeldung an einem Server damit nicht möglich ist. Auch bei geplanten Aufgaben gibt es eine Einschränkung, denn gMSA lassen sich nicht direkt über die Windows-Oberfläche konfigurieren – dafür wird PowerShell benötigt.

Darüber hinaus benötigen gMSA eine kontinuierliche Verbindung zum Domänencontroller, um die automatischen Kennwortaktualisierungen zu erhalten. Falls ein Server über einen längeren Zeitraum offline ist, könnten Authentifizierungsprobleme auftreten. Außerdem sind diese Konten nur innerhalb einer Domäne nutzbar und können nicht über Domänengrenzen hinweg eingesetzt werden.

Eine weitere Herausforderung besteht in der Verwaltung der Berechtigungen. Jeder Server, der ein gMSA verwenden soll, muss explizit in einer Liste mit berechtigten Systemen (PrincipalsAllowedToRetrieveManagedPassword) eingetragen werden. Dies erfordert eine präzise Planung, um die Zugriffskontrolle effektiv zu verwalten. Abschließend besteht trotz der automatisierten Kennwortverwaltung weiterhin ein potenzielles Sicherheitsrisiko, falls ein Server kompromittiert wird und dadurch das Kennwort ausgelesen werden könnte.

Fazit

Gruppenverwaltete Dienstkonten (gMSA) sind eine äußerst praktische Lösung für die sichere und automatisierte Verwaltung von Dienstkonten in Windows-Umgebungen. Die automatische Kennwortverwaltung, die erhöhte Sicherheit und die vereinfachte Administration machen sie besonders geeignet für Unternehmen, die ihre IT-Infrastruktur effizienter gestalten möchten. Allerdings sollten Administratoren sich der potenziellen Einschränkungen bewusst sein und bewährte Sicherheitsmaßnahmen anwenden, um mögliche Risiken zu minimieren.

Server, Windows Server 2019, Windows Server 2022, Windows Server 2025

Powershell: KeePass-Nutzung in Skripten

Posted on 20. Mai 202519. Mai 2025 By Daniel Lensing Keine Kommentare zu Powershell: KeePass-Nutzung in Skripten

Die Verwaltung von Passwörtern ist in der modernen IT-Landschaft ein zentrales Thema. In diesem Artikel gehe ich darauf ein, wie man mithilfe von PowerShell und KeePass-Passwortdatenbanken einen sicheren Zugriff auf sensible Informationen ermöglicht. Dabei werden zwei Ansätze vorgestellt: Ein klassisches Skript, das direkt die KeePassLib.dll verwendet, sowie eine Methode, die das PowerShell-Modul Microsoft.PowerShell.SecretManagement in Kombination mit einem KeePass-Vault-Adapter nutzt. Außerdem zeige ich, wie man das Masterkennwort schützt, sodass es nicht als Klartext im Skript sichtbar ist.

1. Das klassische PowerShell-Skript mit KeePassLib.dll

Ein häufiger Ansatz besteht darin, ein PowerShell-Skript zu erstellen, das direkt auf die KeePassLib.dll zugreift. Diese Bibliothek, die üblicherweise bei der Installation von KeePass verfügbar ist, stellt alle nötigen Klassen und Methoden bereit, um auf die Datenbank zuzugreifen und Einträge auszulesen.

Beispielskript:

<#
Dieses Skript öffnet eine KeePass-Datenbank (.kdbx) und extrahiert das Passwort eines
spezifizierten Eintrags. Bitte passe anschlieĂźend Pfade, den Eintragstitel und das Masterkennwort 
an deine Gegebenheiten an.

Voraussetzungen:
- KeePassLib.dll (normalerweise ĂĽber die KeePass-Installation enthalten)
- Eine funktionierende KeePass-Datenbank (.kdbx) und das zugehörige Masterkennwort

Achtung: Sensible Daten (wie Masterkennwort) sollten nicht im Klartext hinterlegt werden.
#>

# Pfad zur KeePassLib.dll (anpassen, falls erforderlich)
$libPath = "C:\Program Files (x86)\KeePass Password Safe 2\KeePassLib.dll"
if (-Not (Test-Path $libPath)) {
    Write-Error "Die KeePassLib.dll wurde unter '$libPath' nicht gefunden."
    exit 1
}
Add-Type -Path $libPath

# Datenbankpfad und Zugangsdaten (bitte an deine Umgebung anpassen)
$dbPath = "C:\Path\Zu\Deiner\Datenbank.kdbx"   # Pfad zur KeePass-Datenbank
$masterPassword = "DeinMasterPasswort"          # Masterkennwort (nicht im Klartext speichern!)

# Erstelle einen CompositeKey und fĂĽge das Masterkennwort als Benutzer-SchlĂĽssel hinzu
$compositeKey = New-Object KeePassLib.Keys.CompositeKey
$passwordKey = New-Object KeePassLib.Keys.KcpPassword
$passwordKey.Password = $masterPassword
$compositeKey.AddUserKey($passwordKey)

# Ă–ffne und lade die KeePass-Datenbank
$db = New-Object KeePassLib.PwDatabase
try {
    $db.Open($dbPath, $compositeKey, [System.IO.FileAccess]::Read)
} catch {
    Write-Error "Fehler beim Ă–ffnen der Datenbank: $_"
    exit 1
}

# Suche nach einem Eintrag anhand seines Titels (ein Beispielwert, bitte anpassen)
$entryTitle = "MeinEintrag"   # Titel des gewĂĽnschten Eintrags
$entry = $db.RootGroup.FindEntries({$_.Strings.ReadSafe("Title") -eq $entryTitle}, $true) | Select-Object -First 1

if ($null -eq $entry) {
    Write-Output "Kein Eintrag mit dem Titel '$entryTitle' gefunden."
} else {
    # Extrahiere das Passwort des gefundenen Eintrags
    $password = $entry.Strings.ReadSafe("Password")
    Write-Output "Das Passwort fĂĽr den Eintrag '$entryTitle' lautet: $password"

    # Hier kannst du das Passwort weiterverarbeiten, z. B. einem anderen Skript übergeben oder in Variablen speichern.
}

# SchlieĂźe die Datenbank, um Ressourcen freizugeben
$db.Close()

Erklärung:

  • Das Skript lädt zunächst die KeePassLib.dll und ĂĽberprĂĽft, ob der Pfad korrekt ist.
  • AnschlieĂźend wird ein CompositeKey erstellt, dem das Masterkennwort als SchlĂĽssel hinzugefĂĽgt wird.
  • Mithilfe der gewählten API öffnet man die KeePass-Datenbank im Lesemodus und sucht nach einem Eintrag anhand des Titels.
  • Wird der Eintrag gefunden, wird das Passwort extrahiert und ausgegeben, sodass es in weiteren Prozessen genutzt werden kann.

Dieser Ansatz bietet eine direkte und flexible Möglichkeit, mit KeePass-Datenbanken zu arbeiten, setzt aber voraus, dass sensible Daten (etwa das Masterkennwort) sicher gehandhabt werden.

2. Nutzung von Microsoft.PowerShell.SecretManagement

Ein moderner und oft sichererer Ansatz ist die Verwendung des Moduls Microsoft.PowerShell.SecretManagement. Dieser Vault-Ansatz bietet eine einheitliche API zur Verwaltung von Geheimnissen aus verschiedensten Quellen – KeePass gehört dabei mit einem dedizierten Adapter dazu.

Der erste Schritt besteht darin, die Module zu installieren:

Install-Module Microsoft.PowerShell.SecretManagement -Scope CurrentUser
Install-Module KeePassSecretManagement -Scope CurrentUser

Nach erfolgreicher Installation registrierst du deinen KeePass-Vault in der SecretManagement-Umgebung:

Register-SecretVault -Name "KeePassVault" -ModuleName KeePassSecretManagement -DefaultVault `
    -VaultParameters @{ 
        DatabasePath = "C:\Path\Zu\Deiner\Datenbank.kdbx"; 
        MasterPassword = "DeinMasterPasswort" 
    }

Sobald der Vault registriert ist, kannst du ĂĽber den Befehl Get-Secret darauf zugreifen:

Get-Secret -Name "MeinEintrag" -Vault "KeePassVault"

Vorteile:

  • Einheitliche Schnittstelle: Egal, ob du Azure Key Vault, SecretStore oder KeePass einsetzt – die API bleibt gleich.
  • Verbesserte Sicherheit: Der Vault-Adapter abstrahiert die direkte Handhabung von Kennwörtern und ermöglicht damit einen saubereren Zugang.
  • Flexibilität und Erweiterbarkeit: Weitere Vaults können problemlos integriert werden, was besonders in größeren Automatisierungsszenarien nĂĽtzlich ist.

3. Schutz des Masterkennworts – So vermeidest du Klartext im Skript

Ein häufiges Sicherheitsrisiko bei Skripten ist die Hardcodierung von Passwörtern. Es gibt einige Best Practices, um das Masterkennwort zu schützen:

3.1. Eingabeaufforderung zur Laufzeit mit SecureString

Statt das Kennwort im Skript zu speichern, forderst du den Benutzer zur Laufzeit zur Eingabe auf. Dies erfolgt mit dem Parameter -AsSecureString:

$secureMasterPassword = Read-Host "Bitte gib dein Masterkennwort ein" -AsSecureString

Falls ein normaler String benötigt wird, kann der SecureString konvertiert werden:

$unsecureMasterPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
    [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureMasterPassword)
)

3.2. Nutzung von SecretManagement/SecretStore

Neben der direkten Eingabe kannst du das Kennwort auch zentral über ein Vault-Modul speichern. So greifst du später sicher darauf zu, ohne es im Skript zu hinterlegen:

Register-SecretVault -Name "KeePassVault" -ModuleName KeePassSecretManagement -DefaultVault `
    -VaultParameters @{ 
        DatabasePath   = "C:\Path\Zu\Deiner\Datenbank.kdbx"; 
        MasterPassword = (Get-Secret -Name "MasterKennwort" -Vault "SecretStore")
    }

3.3. VerschlĂĽsselte Konfigurationsdatei

Eine weitere Möglichkeit ist, das Masterkennwort in einer verschlüsselten Datei abzulegen. Dabei wird der SecureString mit ConvertFrom-SecureString verschlüsselt abgespeichert und bei Bedarf wieder eingelesen:

Speichern:

$secureMasterPassword = Read-Host "Bitte gib dein Masterkennwort ein" -AsSecureString
$secureMasterPassword | ConvertFrom-SecureString | Out-File "C:\Path\zur\secret.config"

Laden:

$encryptedString = Get-Content "C:\Path\zur\secret.config"
$secureMasterPassword = $encryptedString | ConvertTo-SecureString

Diese Methode nutzt die Windows-Datenschutz-API (DPAPI), die sicherstellt, dass die Datei nur mit dem Benutzerkonto, das sie erstellt hat, entschlĂĽsselt werden kann.

Fazit

Die sichere Verwaltung von Passwörtern ist in jeder IT-Umgebung essenziell. Mit PowerShell und KeePass stehen dir zwei leistungsfähige Ansätze zur Verfügung:

  • Der direkte Zugriff ĂĽber die KeePassLib.dll bietet Flexibilität und Kontrolle, erfordert aber sorgfältigen Umgang mit sensiblen Daten.
  • Die Verwendung des Microsoft.PowerShell.SecretManagement-Moduls in Kombination mit einem KeePass-Vault-Adapter sorgt fĂĽr eine einheitliche, moderne und oft sicherere Verwaltung von Geheimnissen.

Besonders wichtig ist es, das Masterkennwort nicht im Klartext im Skript zu hinterlegen, sondern es entweder zur Laufzeit einzugeben, zentral in einem sicheren Vault zu speichern oder in einer verschlüsselten Datei abzulegen. Dadurch minimierst du das Risiko eines unbefugten Zugriffs und stellst sicher, dass deine Passwörter geschützt bleiben.

Client, Powershell, Programmierung, Server, Windows 10, Windows 11, Windows Server 2019, Windows Server 2022, Windows Server 2025

Powershell: Ist ein Kennwort bei „Have I Been Pwned“ bekannt?

Posted on 17. Mai 202517. Mai 2025 By Daniel Lensing Keine Kommentare zu Powershell: Ist ein Kennwort bei „Have I Been Pwned“ bekannt?

In der heutigen digitalen Welt ist die Sicherheit von Passwörtern wichtiger denn je. Datenlecks und Passwortdiebstähle sind an der Tagesordnung, und Millionen von Zugangsdaten gelangen regelmäßig in die Hände von Cyberkriminellen. Ein äuĂźerst nĂĽtzliches Tool zur ĂśberprĂĽfung der Sicherheit von Passwörtern ist die API „api.pwnedpasswords.com“, die von Have I Been Pwned (HIBP) bereitgestellt wird.

Wie funktioniert die API?

Die API verwendet das k-Anonymitätsprinzip, um sicherzustellen, dass das zu prüfende Passwort nicht vollständig offengelegt wird. Der Prozess sieht folgendermaßen aus:

  1. Der Benutzer oder die Anwendung hashen das zu ĂĽberprĂĽfende Passwort mit SHA-1.
  2. Die ersten 5 Zeichen des Hashs werden an die API gesendet.
  3. Die API antwortet mit einer Liste aller Hashes, die mit diesen ersten 5 Zeichen beginnen und in ihrer Datenbank gefunden wurden.
  4. Die Anwendung vergleicht den vollständigen Hash des geprüften Passworts mit den zurückgegebenen Hashes.
  5. Falls eine Ăśbereinstimmung gefunden wird, bedeutet dies, dass das Passwort kompromittiert ist und nicht verwendet werden sollte.

Dieses Verfahren stellt sicher, dass ein vollständiger Passwort-Hash niemals über das Internet übertragen wird, wodurch das Risiko minimiert wird, dass Angreifer sensible Informationen abfangen können.

Wie spreche ich die API per Powershell auf?

Ich habe den Abruf in eine Funktion geschrieben. Dieses hat fĂĽr mich den Vorteil, dass ich den dann notwendigen Aufruf an mehrern Stellen in Programmierungen verwendne kann.

function Test-PwnedPassword {
    param (
        [string]$Password
    )

    # Passwort hashen (SHA-1)
    $sha1 = New-Object System.Security.Cryptography.SHA1Managed
    $hashBytes = $sha1.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($Password))
    $hashString = [BitConverter]::ToString($hashBytes) -replace '-',''
    
    # Ersten fĂĽnf Zeichen extrahieren
    $prefix = $hashString.Substring(0, 5)
    
    # API-Abfrage
    $url = "https://api.pwnedpasswords.com/range/$prefix"
    try {
        $response = Invoke-WebRequest -Uri $url -UseBasicParsing
        $hashes = $response.Content -split "`n"

        # Prüfen, ob das vollständige Hash-Suffix in der Liste ist
        foreach ($line in $hashes) {
            $parts = $line -split ":"
            if ($hashString.Substring(5) -eq $parts[0]) {
                Write-Output "Das Passwort wurde bereits $($parts[1]) Mal gefunden!"
                return
            }
        }
        Write-Output "Das Passwort wurde nicht gefunden."
    }
    catch {
        Write-Output "Fehler bei der API-Anfrage: $_"
    }
}

FĂĽr den Test des Skriptes kann folgender Test-Aufruf verwendet werden.

$passwort = Read-Host „Geben Sie Ihr Passwort ein“
Test-PwnedPassword -Password $passwort

Client, Powershell, Programmierung, Server, Windows 10, Windows 11, Windows Server, Windows Server 2019, Windows Server 2022, Windows Server 2025

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

Powershell: Ziel einer URL abfragen

Posted on 12. Mai 202510. Mai 2025 By Daniel Lensing Keine Kommentare zu Powershell: Ziel einer URL abfragen

Ich durfte am Wochenende einen Umzug einer Domain-Adresse begleiten. Dazu wurden Webservices angepasst. Ich wollte die erforderliche Abfrage nach der Umstellung schnell per Skript prĂĽfen. Bei diesem ist das folgende entstanden:

[CmdletBinding()]
param(
    [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
    [string[]]$URL
)

function Expand-URL {
    param (
        [Parameter(Mandatory = $true)]
        [string]$ShortUrl
    )
    try {
        $resp = Invoke-WebRequest -Uri $ShortUrl -MaximumRedirection 10 -Method Head -UseBasicParsing
        return $resp.BaseResponse.ResponseUri.AbsoluteUri
    }
    catch {
        try {
            $resp = Invoke-WebRequest -Uri $ShortUrl -MaximumRedirection 10 -Method Get -UseBasicParsing
            return $resp.BaseResponse.ResponseUri.AbsoluteUri
        }
        catch {
            Write-Error "Fehler beim Abrufen der URL [$ShortUrl]: $_"
            return $null
        }
    }
}

foreach ($shortUrl in $URL) {
    $finalUrl = Expand-URL -ShortUrl $shortUrl
    if ($finalUrl) {
        Write-Output "Zieladresse: "$finalUrl
    }
    else {
        Write-Output "Konnte die Zieladresse fĂĽr $shortUrl nicht ermitteln."
    }
}

Dieses muss als Datei gespeichert werden. Mit dem Aufruf

.\Skript.ps1 https://www.url.com

kann dann die Adresse aufgelöst werden. Sollte eine Weiterleitung eingerichtet sein, wird die passende Zieladresse ausgegeben.

Internet, Powershell, Programmierung, Web-Installationen, Windows Server 2019, Windows Server 2022, Windows Server 2025

Support-Ende fĂĽr Ubuntu 20.04

Posted on 29. April 202521. April 2025 By Daniel Lensing Keine Kommentare zu Support-Ende fĂĽr Ubuntu 20.04

Ubuntu 20.04 LTS (Focal Fossa) hat seit seiner Veröffentlichung im April 2020 viele Nutzer weltweit begleitet. Als Long-Term-Support-Version (LTS) bot es fünf Jahre lang Sicherheitsupdates und technische Unterstützung. Doch am 29. Mai 2025 endet der reguläre Support für diese Version.

Was bedeutet das Supportende?

Das Ende des Supports bedeutet, dass keine Sicherheitsupdates, Fehlerbehebungen oder technische Unterstützung mehr bereitgestellt werden. Systeme, die weiterhin auf Ubuntu 20.04 laufen, sind anfällig für Sicherheitslücken und potenzielle Angriffe. Dies stellt ein erhebliches Risiko dar, insbesondere für Unternehmen, die auf dieser Version arbeiten.

Optionen fĂĽr Nutzer

  1. Upgrade auf eine neuere Version: Ubuntu empfiehlt ein Upgrade auf Ubuntu 22.04 LTS (Jammy Jellyfish) und anschlieĂźend auf Ubuntu 24.04 LTS (Noble Numbat). Beide Versionen bieten langfristigen Support und verbesserte Sicherheitsfunktionen.
  2. Ubuntu Pro: Für Nutzer, die ein Upgrade nicht durchführen können, bietet Canonical das erweiterte Support-Programm Ubuntu Pro an. Dieses Programm verlängert den Support für Ubuntu 20.04 um bis zu fünf Jahre und bietet Sicherheitsupdates für tausende Pakete.

Warum ist ein Upgrade wichtig?

Ein Upgrade schützt Ihre Infrastruktur vor Sicherheitsrisiken und ermöglicht den Zugang zu neuen Funktionen und Leistungsverbesserungen. Ubuntu 22.04 und 24.04 bieten nicht nur verbesserten Schutz, sondern auch langfristigen Support bis 2029 (bei 22.04.) oder 2032 (bei 24.04.).

Welche Kosten entstehen durch Ubuntu Pro?

Die Kosten fĂĽr Ubuntu Pro variieren je nach Nutzung und Supportumfang:

  1. Für Privatanwender: Ubuntu Pro ist kostenlos für bis zu 5 Geräte. Aktive Mitglieder in der Ubuntu-Community können es sogar auf bis zu 50 Geräten kostenlos nutzen.
  2. FĂĽr Unternehmen:
    • Desktop oder Workstation: Die Preise liegen zwischen 25 und 300 USD pro Jahr.
    • Server mit unbegrenzten virtuellen Maschinen: Die Kosten reichen von 500 bis 3.400 USD pro Jahr, abhängig vom gewählten Supportumfang (Self-Service, Infrastruktur-Support oder vollständiger Support).

Ubuntu Pro bietet Sicherheitsupdates für bis zu 10 Jahre und deckt Tausende von Paketen ab. Es ist besonders nützlich für Unternehmen, die langfristige Stabilität und Sicherheit benötigen.

Arbeitszimmer, Client, Server, Ubuntu (Linux), Ubuntu Server

Seitennummerierung der Beiträge

1 2 … 23 Nächste

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

  • Allgemein (1)
  • Client (238)
    • Android (8)
    • Fedora (Linux) (5)
    • iOS (6)
    • Mac OS X (6)
    • Peripherie (5)
    • Ubuntu (Linux) (9)
    • Windows 10 (62)
    • Windows 11 (24)
    • 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 (57)
    • Auto (18)
    • Bahn (18)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (212)
    • #t2dhero (56)
    • Arbeitszimmer (36)
    • Audio (22)
    • Film / Kino (7)
    • Gedanken (81)
    • Gesundheit (36)
    • Internet (6)
    • Lebensmittel & Essen (22)
    • Lesestoff (19)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (49)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (4)
    • Zertifizierung (42)
  • Programme (328)
    • Android-Apps (28)
    • Eigene Tools (12)
    • iOS-Apps (7)
    • Office (87)
    • Patchday+Updates (75)
    • Software (151)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (93)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (62)
    • VB.NET (10)
    • VBA (10)
    • VBS (10)
  • Server (160)
    • 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 (19)
    • Windows Server 2022 (16)
    • Windows Server 2025 (9)
  • 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