Powershell: Windows 11 Bloatware deinstallieren

# Registry-Pfad und Schlüsselname für den Check
$registryPath = "HKLM:\Software\IT und Veranstaltungstechnik Hense\BloadwareRemovalScript"
$registryValue = "ScriptExecuted"

# Überprüfen, ob der Registry-Wert bereits gesetzt ist
if (Test-Path -Path "$registryPath\$registryValue") {
    Write-Host "Das Skript wurde bereits ausgeführt. Beende das Skript."
    exit 0
}

# Liste der Apps, die entfernt werden sollen, einschließlich Cortana
$appsToRemove = @(
    "Microsoft.MicrosoftSolitaireCollection",
    "Microsoft.XboxGameOverlay",
    "Microsoft.XboxGameCallableUI",
    "Microsoft.Xbox.TCUI",
    "Microsoft.XboxApp",
    "Microsoft.XboxGamingOverlay",
    "Microsoft.XboxIdentityProvider",
    "Microsoft.XboxSpeechToTextOverlay",
    "Microsoft.ZuneMusic",
    "Microsoft.ZuneVideo",
    "Microsoft.BingNews",
    "Microsoft.WindowsMaps",
    "Microsoft.People",
    "Microsoft.SkypeApp",
    "Microsoft.OneConnect",
    "Microsoft.WindowsFeedbackHub",
    "Microsoft.Messaging",
    "Microsoft.549981C3F5F10",  # Cortana ID
    "Microsoft.Copilot",
    "MicrosoftTeams", 
    "MicrosoftCorporationII.MicrosoftFamily",
    "Microsoft.OutlookForWindows",
    "Microsoft.MicrosoftOfficeHub", 
    "Microsoft.GetHelp",
    "Microsoft.GamingApp",
    "Microsoft.BingSearch",
    "Microsoft.BingWeather", 
    "Microsoft.BingNews",
    "Microsoft.Getstarted",
    "Microsoft.ZuneMusic",
    "Microsoft.ZuneVideo",
    "Microsoft.WindowsFeedbackHub",
    "microsoft.windowscommunicationsapps"
)

# Vorinstallierte Apps für alle Benutzer durchsuchen und entfernen, wenn sie in der Liste stehen
Get-AppxPackage -AllUsers | ForEach-Object {
    if ($appsToRemove -contains $_.Name) {
        Write-Host "Entferne App: $($_.Name)"
        Remove-AppxPackage -Package $_.PackageFullName -AllUsers
    }
}

# Vorinstallierte System-Apps entfernen, wenn sie in der Liste stehen
Get-AppxProvisionedPackage -Online | ForEach-Object {
    if ($appsToRemove -contains $_.DisplayName) {
        Write-Host "Entferne System-App: $($_.DisplayName)"
        Remove-AppxProvisionedPackage -Online -PackageName $_.PackageName
    }
}

# Nach erfolgreicher Ausführung den Registry-Wert setzen
if (-not (Test-Path -Path $registryPath)) {
    New-Item -Path $registryPath -Force
}
Set-ItemProperty -Path $registryPath -Name $registryValue -Value $true

Write-Host "Das Skript wurde erfolgreich ausgeführt und der Registry-Wert wurde gesetzt."