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: 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

AD Webservices: Einschränkung bei Powershell

Posted on 22. April 202521. April 2025 By Daniel Lensing Keine Kommentare zu AD Webservices: Einschränkung bei Powershell

Die Einstellung MaxGroupOrMemberEntries in Active Directory Web Services (ADWS) legt die maximale Anzahl von Gruppenmitgliedern fest, die von bestimmten PowerShell-Cmdlets abgerufen werden können. Standardmäßig ist dieser Wert auf 5000 begrenzt.

Dieses ist mir aufgefallen als ich eine Abfrage mit dem CMDlet „Get-ADGroupMember“ abfragen wollte. Die Gruppe hatte eine Mitgliederanzahl größer den 5000.

Die Einschränkung gilt für die folgenden CMDlets:

  • Get-ADGroupMember
    • Wird verwendet, um Mitglieder einer Gruppe abzurufen. Die Anzahl der zurückgegebenen Mitglieder ist durch diesen Eintrag begrenzt.
  • Get-ADPrincipalGroupMembership
    • Dieses Cmdlet listet alle Gruppenmitgliedschaften eines Benutzers oder Computers auf.
  • Get-ADAccountAuthorizationGroup
    • Zeigt die Sicherheitsgruppen an, die für die Autorisierung eines Benutzerkontos verwendet werden.

Es gibt 2 Varianten, dieses Problem zu umgehen. Die einfachste Möglichkeit ist die Nutzung des CMDlets „Get-ADGroup“, die mit dem ExtensionProperty „Member“ genutzt wird und einer Pipe die Daten weiterverarbeitet.

Eine zweite Variante ist die Erweiterung im Active Directory Webservice (ADWS). Dazu muss der Eintrag

<add key="MaxGroupOrMemberEntries" value="20000"/>

in der Datei C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe.config hinzugefügt werden. Dieses ist mit einem Texteditor möglich. Dieses muss im Bereich der <appSettings> geschehen. Um die Änderung zu übernehmen, muss der Dienst neugestartet werden.

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

Anwendungsspezifisches Eventlog für Powershell-Skript

Posted on 18. Februar 202517. Februar 2025 By Daniel Lensing Keine Kommentare zu Anwendungsspezifisches Eventlog für Powershell-Skript

Im Rahmen eines Skriptes kann es sinnvoll sein, wenn man ein dediziertes Eventlog erstellt. Dieses kann dann zum Beispiel in einer Monitoring-Lösung weiterverarbeitet werden.

Dazu muss ein neues „Eventlog“ sowie eine neue „Source“ erstellt werden über den Powershell-Befehl „New-Eventlog„:

New-EventLog -LogName "ApplicationName" -Source "AutoScriptPS1" -EA SilentlyContinue

Diese Befehlszeile muss mit administrativen Rechten ausgeführt werden.

Anschließend ist es möglich das neu erstellte Eventlog per Write-Eventlog mit Werten zu befüllen:

Write-EventLog 
      -LogName "ApplicationName"'
      -Source "AutoScriptPS1"'
      -EntryType "Error"'
      -Message "An issue has stopped the script."'
      -EventId 99

Als „EntryType“ können neben „Error“ auch „Information“ oder „Warning“ genutzt werden. Die EventID kann bis zu einem Wert 65535 definiert werden.

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

Seitennummerierung der Beiträge

1 2 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 (234)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (59)
    • Windows 11 (20)
    • 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 (199)
    • #t2dhero (50)
    • Arbeitszimmer (28)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (78)
    • Gesundheit (31)
    • Internet (5)
    • Lebensmittel & Essen (22)
    • Lesestoff (18)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (48)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (3)
    • Zertifizierung (42)
  • Programme (322)
    • Android-Apps (27)
    • Eigene Tools (11)
    • iOS-Apps (6)
    • Office (86)
    • Patchday+Updates (73)
    • Software (149)
    • 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