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

Minuten in Dezimal: Präzision in der Zeitabrechnung

Posted on 4. August 20253. August 2025 By Daniel Lensing Keine Kommentare zu Minuten in Dezimal: Präzision in der Zeitabrechnung

Ob bei Projektabrechnungen, in Zeiterfassungssystemen oder bei der Datenanalyse – die Umrechnung von Minuten in Dezimalstunden ist ein oft unterschätzter, aber enorm hilfreicher Vorgang. Viele denken bei „Zeit“ an Stunden und Minuten im klassischen Sinn. Doch wenn es um exakte Berechnungen und transparente Auswertungen geht, zeigt sich: Dezimale Zeitrechnung spart nicht nur Zeit, sondern macht komplexe Zahlen sofort greifbar.

Warum Minuten in Dezimal umwandeln?

Minuten eignen sich hervorragend fürs tägliche Leben, aber bei Berechnungen – etwa für Gehälter, Projektkosten oder statistische Auswertungen – sind sie unhandlich. Dezimalwerte bieten hier klare Vorteile:

  • Einfachere Rechnungen: Addition, Multiplikation oder Vergleich von Zeiten wird deutlich ĂĽbersichtlicher.
  • Softwarefreundlich: Viele Tools wie Excel, Datenbanken oder Programmiersprachen nutzen dezimale Zeitangaben nativ.
  • Transparente Abrechnung: Gerade bei Stundenlohn oder Zeiterfassung fĂĽhren Dezimalwerte zu nachvollziehbaren Ergebnissen.

Die Formel: Minuten zu Dezimalstunden

Die Umrechnung funktioniert denkbar einfach: Du teilst die Anzahl der Minuten durch 60 (den Minutenanteil einer Stunde).

Dezimalstunden = Minuten Ă· 60

Beispiele:

MinutenRechnungDezimalstunden
1515 Ă· 600,25
3030 Ă· 600,50
4545 Ă· 600,75
1010 Ă· 600,1667
11 Ă· 600,0167
9090 Ă· 601,5

Tipp: Wenn du Sekunden umrechnen willst, nutze Sekunden Ă· 3600.

PowerShell-Skript zur Umrechnung

Wenn du häufig Zeitwerte umrechnen musst, lohnt sich ein kleines Skript. Hier ist eine praktische PowerShell-Funktion, die du direkt verwenden kannst:

function Convert-MinutesToDecimal {
param ( 
[int]$Minutes 
) 
$DecimalHours = $Minutes / 60 
return [math]::Round($DecimalHours, 4) 
} 

# Beispiel $result = Convert-MinutesToDecimal -Minutes 25 
Write-Output "25 Minuten entsprechen $result Dezimalstunden."

⚙️ Du kannst das Skript beliebig erweitern – etwa um eine Eingabemaske, CSV-Verarbeitung oder eine grafische Oberfläche mit PowerShell GUI-Modulen. So hast du deine Zeitdaten immer griffbereit!

Anwendung in der Praxis

Gerade fĂĽr Freelancer, Unternehmen und Entwickler ergeben sich zahlreiche Einsatzbereiche:

  • Stundenzettel automatisieren: Statt „1 Stunde 45 Minuten“ einfach „1,75 Stunden“ eintragen.
  • Projektkosten berechnen: Dezimalwerte lassen sich direkt mit dem Stundensatz multiplizieren.
  • Datenauswertung & Reporting: Zeitvergleiche und Trends werden verständlicher.

Ein Beispiel aus dem Alltag: Du arbeitest 2 Stunden und 18 Minuten an einem Kundenprojekt. Umgerechnet entspricht das:

2 + (18 Ă· 60) = 2,3 Stunden

Bei einem Stundensatz von 70 € ergibt das: 2,3 × 70 € = 161 € brutto

Minuten zu Dezimalstunden umgewandelt

MinutenDezimalMinutenDezimalMinutenDezimal
10,02210,35410,68
20,03220,37420,70
30,05230,38430,72
40,07240,40440,73
50,08250,42450,75
60,10260,43460,77
70,12270,45470,78
80,13280,47480,80
90,15290,48490,82
100,17300,50500,83
110,18310,52510,85
120,20320,53520,87
130,22330,55530,88
140,23340,57540,90
150,25350,58550,92
160,27360,60560,93
170,28370,62570,95
180,30380,63580,97
190,32390,65590,98
200,33400,67601,00

Zusammenfassend

Minuten in Dezimalstunden umzuwandeln ist keine Geheimwissenschaft – aber eine clevere Vereinfachung mit echtem Mehrwert. Mit der richtigen Formel, einem einfachen Tool oder einem kurzen Skript bringt man Struktur in die Zeitabrechnung. Ob Excel genutzt oder mit PowerShell gearbeitet wird – die dezimale Zeitrechnung hilft dabei, effizienter und nachvollziehbarer zu rechnen

Arbeitszimmer, Gedanken, Leben Beruf und Gesundheit, Office, Powershell

Rufnummern fĂĽr Medienproduktionen (Drama Numbers)

Posted on 17. Juni 202517. Juni 2025 By Daniel Lensing Keine Kommentare zu Rufnummern fĂĽr Medienproduktionen (Drama Numbers)

In Filmen, Serien und Werbespots begegnen uns häufig Telefonnummern. Doch anstatt echte Rufnummern zu verwenden, die potenziell echte Menschen stören könnten, greifen Medienproduktionen auf spezielle „Drama Numbers“ zurück – fiktive Telefonnummern, die sicher für Filmzwecke genutzt werden können.

Was sind Drama Numbers?

Drama Numbers sind Telefonnummern, die speziell für den Einsatz in Film- und Fernsehwelt reserviert sind. Sie ermöglichen es Produzenten, realistische Szenarien darzustellen, ohne versehentlich eine echte Nummer zu verwenden, die Zuschauer später ausprobieren könnten. Häufig sieht man solche Nummern in Filmen oder Serien, wenn eine Figur telefoniert oder eine Telefonnummer auf einem Bildschirm angezeigt wird.

In verschiedenen Ländern gibt es unterschiedliche Standards für Drama Numbers. In den USA zum Beispiel verwenden Filme und Serien traditionell Telefonnummern mit der Vorwahl 555, da dieser Bereich für fiktive Nummern reserviert ist

Warum gibt es Drama Numbers?

Die Einführung von Drama Numbers war eine direkte Reaktion auf Probleme mit echten Telefonnummern in Filmen. Früher kam es vor, dass echte Nummern zufällig verwendet wurden, was dazu führte, dass Besitzer dieser Rufnummern zahlreiche unerwünschte Anrufe erhielten. Um dies zu vermeiden und Produktionsabläufe zu vereinfachen, wurden spezielle Rufnummernbereiche reserviert.

Außerdem helfen Drama Numbers dabei, rechtliche Probleme zu vermeiden: Eine echte Nummer könnte unter Umständen mit einem Unternehmen oder einer Person verbunden sein, und deren ungewollte Erwähnung in einem Film könnte zu Beschwerden oder sogar rechtlichen Konsequenzen führen.

Rufnummern fĂĽr Medienproduktionen

Während in den USA „555“ als Standard für fiktive Nummern etabliert ist, gibt es in Deutschland eigene Regelungen für Rufnummern in Medienproduktionen. Die Bundesnetzagentur stellt beispielsweise bestimmte Telefonnummernbereiche bereit, die für Werbezwecke oder Filmproduktionen genutzt werden können.

Ein typischer Bereich für fiktive deutsche Telefonnummern ist beispielsweise der Bereich (0)170-1234567, der häufig in deutschen Filmen und Serien genutzt wird. Medienproduktionen können auf solche reservierten Nummern zugreifen, ohne sich Sorgen um echte Telefonanschlüsse machen zu müssen. Die entsprechende Liste hat die Bundesnetzagentur veröffentlicht.

Ein internationaler Artikel zum Thema „fictitious telephone number“ enthält auch Beispiele fĂĽr zum Beispiel Frankreich, USA sowie GroĂźbritanien.

Warum ist es fĂĽr mich interessant?

Für Präsentationen oder auch bei Programmierungen mit fiktiven personenbezogenen Daten können diese Numern genauso verwendet werden. Damit können Handouts und Dokumentationen ohne Probleme weitergegeben werden.

Arbeitszimmer, Eigene Tools, Leben Beruf und Gesundheit, Lehren & Lernen, Powershell, Präsentation, Programme, Programmierung, VB.NET

Global Standard Numeric Date Format – ISO 8601

Posted on 12. Juni 202512. Juni 2025 By Daniel Lensing Keine Kommentare zu Global Standard Numeric Date Format – ISO 8601

Datumsschreibweisen können verwirrend sein – je nach Land variieren die Formate stark. Um Missverständnisse zu vermeiden, wurde das Global Standard Numeric Date Format (GSNDF) vorgeschlagen, ein universelles, numerisches Datumsformat für die internationale Kommunikation und Standardisierung.

Was ist die Definition?

Das GSNDF setzt auf eine logische, einheitliche Struktur: Jahr-Monat-Tag (YYYY-MM-DD). Diese Reihenfolge folgt dem Prinzip der abnehmenden Größenordnung und ist standardisiert gemäß ISO 8601, einer internationalen Norm für Datums- und Zeitangaben.

Vorteile des Formats

  • Vermeidung von Missverständnissen
    Durch die einheitliche Reihenfolge werden Fehler vermieden. Beispielsweise kann „03/04/2025“ den 3. April oder den 4. März bedeuten, was zu Verwirrung führen kann. Die Schreibweise 2025-04-03 ist hingegen klar verständlich.
  • Technische Effizienz
    Das GSNDF ist hervorragend fĂĽr Computersysteme geeignet. Die Sortierung erfolgt automatisch chronologisch, da Zahlen von links nach rechts verglichen werden.
  • Internationale Einheitlichkeit
    Geschäftliche Dokumente, wissenschaftliche Veröffentlichungen und öffentliche Verwaltung profitieren von einem einheitlichen Datumsformat.
  • Kompatibilität mit Zeitformaten
    Das Format kann nahtlos mit Zeitangaben kombiniert werden, beispielsweise:
    2025-06-08T18:35:00Z (ISO 8601 mit UTC-Zeitstempel)

Herausforderungen bei der EinfĂĽhrung

  • Gewohnheiten und kulturelle Präferenzen
    Menschen sind an ihre regionalen Datumsformate gewöhnt. Die Umstellung auf YYYY-MM-DD erfordert Anpassung, besonders im täglichen Gebrauch.
  • Kompatibilität mit bestehenden Systemen
    Viele Softwareprodukte und Dokumente sind auf lokale Formate ausgerichtet. Eine Anpassung kann technische Änderungen und Übergangsphasen erfordern.
  • Regionale Vorschriften und Standards
    In offiziellen Dokumenten und Verträgen wird oft das nationale Format vorgeschrieben. Die Anpassung globaler und nationaler Regularien kann ein langwieriger Prozess sein.
  • Fehlende einheitliche EinfĂĽhrung
    Ohne eine zentrale Organisation oder behördliche Verpflichtung bleibt das Format optional. Dadurch kann es weiterhin zu unterschiedlichen Schreibweisen und Missverständnissen kommen.

Fazit

Das Global Standard Numeric Date Format (YYYY-MM-DD) bietet Klarheit, Effizienz und internationale Verständlichkeit. Trotz Herausforderungen wird es zunehmend in internationalen und technischen Kontexten verwendet und könnte langfristig als Standard etabliert werden.

Arbeitszimmer, Powershell, Programme, Programmierung, VB.NET

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

Seitennummerierung der Beiträge

1 2 … 14 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