<# .SYNOPSIS PS 12: Sicherheit, Execution Policies & Secrets Management .DESCRIPTION Lerne professionelles Credential- und Sicherheitsmanagement in PowerShell 7+: - Typensichere PSCredentials mit [SecureString] - Ver- und Entschlüsselung sensibler Daten - Sicherheits-Auditierung (ExecutionPolicy & LanguageMode) - SecretVault-Simulation nach modernem SecretManagement-Standard #> # 🎯 TEILZIEL 1 (TODO 1): New-SecureCredentials <# .DESCRIPTION Wandelt einen Benutzernamen und ein Klartextpasswort in ein sicheres [PSCredential]-Objekt um. Nutzt ConvertTo-SecureString -AsPlainText -Force. .OUTPUTS [PSCredential] #> function New-SecureCredentials { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$UserName, [Parameter(Mandatory = $true)] [string]$PlainTextPassword ) # TODO: # 1. Konvertiere $PlainTextPassword in einen [SecureString] (ConvertTo-SecureString -AsPlainText -Force). # 2. Erzeuge und gib ein [PSCredential]::new($UserName, $secureString) zurück. return $null } # 🎯 TEILZIEL 2 (TODO 2): Protect-SensitiveString & Unprotect-SensitiveString <# .DESCRIPTION Verschlüsselt einen Klartextstring in einen geschützten Standard-String und entschlüsselt ihn wieder. #> function Protect-SensitiveString { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$PlainText ) # TODO: # 1. Konvertiere $PlainText in SecureString. # 2. Konvertiere den SecureString mit ConvertFrom-SecureString in einen verschlüsselten String. return "" } function Unprotect-SensitiveString { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$EncryptedString ) # TODO: # 1. Wandle $EncryptedString mit ConvertTo-SecureString zurück in einen SecureString. # 2. Entschlüssele den Klartext via [System.Net.NetworkCredential]::new('', $secStr).Password return "" } # 🎯 TEILZIEL 3 (TODO 3): Get-SecurityAuditReport <# .DESCRIPTION Prüft die aktuelle Sicherheitskonfiguration der PowerShell-Sitzung. .OUTPUTS [PSCustomObject]@{ LanguageMode = [string] ExecutionPolicy = [string] IsElevated = [bool] SecurityScore = [int] Recommendations = [string[]] } #> function Get-SecurityAuditReport { [CmdletBinding()] param() # TODO: # 1. Ermittle LanguageMode aus $ExecutionContext.SessionState.LanguageMode. # 2. Ermittle die ExecutionPolicy (Get-ExecutionPolicy). # 3. Prüfe, ob administrative Rechte vorliegen. # 4. Berechne einen SecurityScore (0-100) und Empfehlungen. return $null } # 🎯 TEILZIEL 4 (TODO 4): Invoke-SecretVaultSimulation <# .DESCRIPTION Verwaltet einen sicheren Secret Store (Set, Get, Remove, List) auf Basis von SecureString-Verschlüsselung. .OUTPUTS Je nach Aktion: [bool], [string] oder [string[]] #> function Invoke-SecretVaultSimulation { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateSet('Set', 'Get', 'Remove', 'List')] [string]$Action, [Parameter()] [string]$SecretName, [Parameter()] [string]$SecretValue, [Parameter(Mandatory = $true)] [hashtable]$VaultStorage ) # TODO: # Aktion 'Set': Verschlüssele $SecretValue mit Protect-SensitiveString und speichere in $VaultStorage[$SecretName]. Gib $true zurück. # Aktion 'Get': Hole den verschlüsselten Wert, entschlüssele ihn mit Unprotect-SensitiveString und gib Klartext zurück. # Aktion 'Remove': Entferne das Secret aus $VaultStorage. Gib $true zurück falls vorhanden, sonst $false. # Aktion 'List': Gib alle gespeicherten Secret-Namen als Array zurück ($VaultStorage.Keys). return $null }