Ich hörte auf, für Fokussierungs-Apps zu bezahlen, nachdem ich dieses Windows PowerShell-Skript erstellt hatte

In der heutigen digitalen Welt ist Ablenkung allgegenwärtig. Ein selbst entwickeltes PowerShell-Skript hilft, den Fokus zu bewahren, indem es störende Apps und Webseiten blockiert.
Ständig abgelenkt, obwohl eine Deadline drückt? Sie sind nicht allein. Die digitale Welt ist so gestaltet, dass sie uns fesselt und ablenkt. Also habe ich gehandelt und ein PowerShell-Skript entwickelt, um mich vor diesen Störungen zu schützen.
Die ablenkende Desktop-Dystopie
Warum "konzentriere dich einfach mehr" nicht funktioniert
Manche behaupten, Ablenkung sei ein Disziplinproblem. Doch angesichts des heutigen Internets ist das schwer zu behaupten. Als jemand, der im Internet schreibt, rechtfertige ich oft meine Ablenkungen mit "Recherche".
Prokrastination hat jedoch überhandgenommen. Browser-Blocker waren der erste Schritt, doch sie blockieren nur Webseiten, nicht Apps. Discord und Slack bleiben offen und lenken ab.
Es gibt Apps, die Desktop-Programme blockieren, aber ich vertraue ihnen nicht. Ich will kein zusätzliches Tool, das Einblick in mein System hat. Ähnliche Bedenken hatte ich auch bei Webseiten-Blockern.
Also suchte ich eine lokale, idealerweise Open-Source-Lösung, um den Zugriff auf bestimmte Apps und Webseiten zu kontrollieren. Nichts passendes gefunden – also baute ich es selbst.
Ich habe ein PowerShell-Skript geschrieben, um Ablenkungen zu blockieren
Zwei Skripte für Fokus-An/Aus
Dieses Setup nutzt zwei Skripte: Start-Focus.ps1, das ich manuell ausführe, wenn ich konzentriert arbeiten will, und End-Focus.ps1, um die Sitzung zu beenden.
Das Start-Focus-Skript schließt die markierten Ablenkungen – Discord, Slack, Steam. Es läuft im Hintergrund und prüft alle 60 Sekunden aktive Prozesse. Wenn ich eine blockierte App öffne, wird sie automatisch geschlossen.
Außerdem bearbeitet es die Windows-Hosts-Datei, um ablenkende Webseiten auf 127.0.0.1 umzuleiten. Wenn ich mit der Fokussitzung fertig bin, führe ich das End-Focus-Skript aus. Es entfernt die blockierten Domains aus der Hosts-Datei und leert den DNS-Cache, sodass alles sofort wieder funktioniert.
Ich führe die Skripte manuell aus, aber Sie können sie auch mit dem Aufgabenplaner automatisieren, wenn Sie feste Zeiten für Fokussitzungen wünschen.
Wie das Skript funktioniert
Wie es selbst gebaut wird
Erstellen Sie einen Ordner für Ihre PowerShell-Skripte. Ich speichere meine in C:\Projects\PowerShell Scripts\. Erstellen Sie eine neue Textdatei und fügen Sie folgendes Skript ein:
$appsToKill = @( "Discord", "Slack", "Spotify", "Steam" ) $domainsToBlock = @( "youtube.com", "www.youtube.com", "reddit.com", "www.reddit.com", "x.com", "www.x.com", "facebook.com", "www.facebook.com", "instagram.com", "www.instagram.com" ) $checkInterval = 60 $hostsFile = "C:\Windows\System32\drivers\etc\hosts" $marker = "# FOCUS-BLOCK" if (-not ([Security.Principal.WindowsPrincipal] ` [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` [Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Host "Bitte führen Sie dieses Skript als Administrator aus."powershell
foreach ($domain in $domainsToBlock) {
$entry = "127.0.0.1 $domain $marker"
if (-not (Select-String -Path $hostsFile -Pattern ([regex]::Escape($domain)) -Quiet)) {
Add-Content -Path $hostsFile -Value $entry
}
}
ipconfig /flushdns | Out-Null
Write-Host "Fokussitzung gestartet. Domains blockiert." -ForegroundColor Green
Write-Host "Drücken Sie Ctrl+C oder führen Sie End-Focus.ps1 aus, um die Sitzung zu beenden.`n" -ForegroundColor Yellow
while ($true) {
foreach ($app in $appsToKill) {
$process = Get-Process -Name $app -ErrorAction SilentlyContinue
if ($process) {
Stop-Process -Name $app -Force
Write-Host "Geschlossen: $app" -ForegroundColor Red
}
}
Start-Sleep -Seconds $checkInterval
}
Die App-Namen im Konfigurationsabschnitt müssen genau mit den Prozessnamen übereinstimmen, die Windows verwendet, nicht den Namen in der Taskleiste.
Um den Prozessnamen zu finden: App öffnen, Task-Manager (Strg + Shift + Esc) starten, mit der rechten Maustaste auf den Prozess klicken und „Gehe zu Details“ auswählen. Den dort sichtbaren Namen verwenden, ohne die .exe-Erweiterung.
Speichern Sie die Datei unter dem Namen Start-Focus.ps1. Dateityp auf Alle Dateien (.) ändern, um sicherzustellen, dass es korrekt als PowerShell-Skript gespeichert wird. Erstellen Sie anschließend eine Verknüpfung über das Kontextmenü auf dem Desktop oder dem gewünschten Speicherort.
Das Ziel der Verknüpfung sollte sein:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "<Pfad zu Start-Focus.ps1>" Ersetzen Sie <Pfad zu Start-Focus.ps1> durch den tatsächlichen Pfad:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Projects\PowerShell Scripts\Start-Focus.ps1" Nach dem Erstellen der Verknüpfung: Rechtsklick, Eigenschaften, dann im Abschnitt Verknüpfung auf Erweitert klicken. „Als Administrator ausführen“ aktivieren. Dies ist erforderlich, da das Skript die hosts-Datei ändert.
Damit haben Sie das Start Focus-Skript erfolgreich erstellt. Doppelklicken Sie auf die Verknüpfung, um es zu starten und alle zugewiesenen Apps und Webseiten zu blockieren.
Das Skript öffnet ein Terminalfenster. Dieses Fenster schließen stoppt das Skript. Es schließt die ablenkenden Apps nicht automatisch, wenn sie versehentlich geöffnet werden.
Für das Endskript: Gehen Sie zu dem Ordner, in dem Sie Start-Focus.ps1 gespeichert haben, erstellen Sie eine neue Textdatei und kopieren Sie Folgendes:
$hostsFile = "C:\Windows\System32\drivers\etc\hosts"
$marker = "# FOCUS-BLOCK"
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Host "Bitte führen Sie dieses Skript als Administrator aus." -ForegroundColor Red
exit
}
$lines = Get-Content $hostsFile
$cleaned = $lines | Where-Object { $_ -notmatch [regex]::Escape($marker) }
$cleaned | Set-Content $hostsFile
ipconfig /flushdns | Out-Null
$focusProcess = Get-CimInstance Win32_Process | Where-Object { $_.Name -in @("powershell.exe", "pwsh.exe") -and $_.CommandLine -like "*Start-Focus.ps1*" }
if ($focusProcess) {
$focusProcess | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
Write-Host "Start-Focus Prozess beendet." -ForegroundColor Yellow
}
Write-Host "Fokus-Sitzung beendet. Alle Domains entsperrt." -ForegroundColor Green
Das End-Focus-Skript beendet „Start-Focus.ps1“. Bei Umbenennung des Startskripts die Zeile zur Prozessübereinstimmung anpassen.
Klicken Sie auf „Speichern unter“, benennen Sie die Datei End-Focus.ps1.
Stellen Sie den Dateityp auf Alle Dateien (.) ein. Erstellen Sie eine neue Verknüpfung mit dem Pfad zu dieser Datei. Setzen Sie die Option „Als Administrator ausführen“ und das war's. Führen Sie dieses Skript aus, wenn Ihre Fokus-Sitzung vorbei ist. Es macht alle Websites wieder zugänglich und öffnet Ihre Apps.
Ihr Fokus zurück in Ihren Händen
Dieses Setup ist einfach, aber es funktioniert. Keine Abonnements, keine Drittanbieter-Apps, keine Überwachung. Der Einrichtungsprozess? Etwas knifflig, ja. Aber der Workflow danach? Streng und effizient. Klicken Sie einfach auf die Verknüpfung, und Ihr Rechner blockiert Ablenkungen, bevor sie überhaupt entstehen.
Bist du neugierig auf weitere Artikel wie Ich hörte auf, für Fokussierungs-Apps zu bezahlen, nachdem ich dieses Windows PowerShell-Skript erstellt hatte? Entdecke spannende Inhalte in der Kategorie Windows.

Schreibe einen Kommentar