Przestałem płacić za aplikacje do skupienia po zbudowaniu tego skryptu PowerShell w systemie Windows

Przestałem płacić za aplikacje do skupienia po zbudowaniu tego skryptu PowerShell w systemie Windows

Męczysz się z rozproszeniem? W artykule opisuję, jak za pomocą skryptu PowerShell zablokować aplikacje i witryny, aby zwiększyć swoją koncentrację.

Rozpraszają Cię powiadomienia, mimo że deadline wisi nad głową? Nie jesteś sam. W dzisiejszym cyfrowym świecie łatwo wpaść w sidła ciągłych bodźców. Postanowiłem stawić temu czoła – napisałem skrypt PowerShell, który ma mi pomóc uchronić się przed tym chaosem.

Rozpraszające biuro – dystopia

Dlaczego „po prostu skup się mocniej” nigdy nie zadziała

Wielu uważa, że to kwestia dyscypliny. Ale prawda jest taka, że internet, w którym żyjemy, to prawdziwe laboratoria rozproszenia. Jako pisarz omawiający tematy w sieci, łatwo usprawiedliwiam każdą minutę spędzoną na przeglądaniu treści jako „badania”.

Ostatnio jednak prokrastynacja osiągnęła nowe szczyty, więc postanowiłem działać. Blokady witryn w przeglądarkach były krokiem w dobrym kierunku, ale niestety obejmowały tylko strony internetowe. A co z aplikacjami, takimi jak Discord czy Slack, które mogą mnie równie dobrze odciągnąć od pracy?

Istnieją aplikacje do blokowania zewnętrznych programów, ale nie miałem ochoty na korzystanie z narzędzi firm trzecich, które monitorują moją aktywność. Wolałem coś lokalnego i open-source. Nie znalazłem nic, co by mi odpowiadało, więc stworzyłem własne rozwiązanie.

Napisałem skrypt PowerShell, aby zablokować wszystkie rozproszenia

Dwa skrypty dla prostego przełącznika on-off dla skupienia

Moje rozwiązanie opiera się na dwóch skryptach PowerShell: Start-Focus.ps1, aktywowanym ręcznie, gdy chcę się skupić, oraz End-Focus.ps1, który aktywuję, gdy kończę pracę.

Skrypt Start-Focus zamyka aplikacje rozpraszające – myślę o Discord, Slacku i Steamie. Co 60 sekund monitoruje aktywne procesy. Kiedy otwieram jedną z zablokowanych aplikacji, została ona natychmiast zamknięta.

Skrypt dodaje również wpisy do pliku hosts systemu Windows, przekierowując rozpraszające witryny na 127.0.0.1, co czyni je niedostępnymi. Gdy sesja dobiega końca, uruchamiam skrypt End-Focus, który usuwa blokady i czyści pamięć podręczną DNS, przywracając dostęp błyskawicznie.

Wszystko to można uruchamiać ręcznie, ale można zautomatyzować proces przez Harmonogram zadań, jeśli chcesz działać zgodnie z grafikiem.

Jak działa skrypt

Wszystko, czego potrzebujesz, aby zbudować to samodzielnie

W pierwszej kolejności utwórz folder na swoje skrypty PowerShell. Ja używam lokalizacji C:\Projects\PowerShell Scripts\. Następnie stwórz nowy plik tekstowy i wklej do niego poniższy skrypt:

 
$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 "Proszę uruchomić ten skrypt jako Administrator." -ForegroundColor Red 
    exit 
} 

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 "Sesja skupienia rozpoczęta. 

Domeny zablokowane." -ForegroundColor Green Write-Host "Naciśnij Ctrl+C lub uruchom End-Focus.ps1, aby zakończyć sesję.`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 "Zamknięto: $app" -ForegroundColor Red } } Start-Sleep -Seconds $checkInterval }

Aplikacje w konfiguracji muszą mieć dokładne nazwy procesów Windows, nie te widoczne na pasku zadań. Aby znaleźć odpowiednią nazwę, uruchom aplikację, otwórz Menedżera zadań (Ctrl + Shift + Esc), kliknij prawym przyciskiem na procesie i wybierz „Przejdź do szczegółów”. Kopiuj nazwę z tej zakładki, pomijając .exe.

Następnie kliknij „Zapisz jako” i nazwij plik Start-Focus.ps1. Upewnij się, że jako typ wybierasz Wszystkie pliki (.), by nie zapisać go jako plik tekstowy. Przejdź na pulpit lub do innego miejsca, z którego chcesz uruchomić skrypt, i stwórz nowy skrót przez prawy przycisk myszy.

Docelowa lokalizacja powinna wyglądać tak:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "<Ścieżka do Start-Focus.ps1>" 

W miejsce <Ścieżki> wstaw rzeczywistą ścieżkę. Na przykład, w moim przypadku to:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Projects\PowerShell Scripts\Start-Focus.ps1" 

Utworzony skrót kliknij prawym przyciskiem, przejdź do Właściwości, potem na kartę Skrót i wybierz Zaawansowane. Włącz „Uruchom jako administrator”. To istotne, ponieważ skrypt edytuje plik hosts, co wymaga uprawnień administratora.

Uruchom skrót, a skrypt od razu zablokuje wszystkie przypisane aplikacje i strony internetowe.

Terminal się otworzy. Jeśli go zamkniesz, skrypt przestanie działać i nie zablokuje dalszych rozpraszaczy, które przypadkowo otworzysz.

Przejdź teraz do skryptu kończącego. W folderze ze skryptem Start-Focus.ps1 utwórz nowy plik tekstowy i wklej to:

$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 "Proszę uruchomić ten skrypt jako Administrator." -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 "Proces Start-Focus zakończony." -ForegroundColor Yellow } Write-Host "Sesja skupienia zakończona. Wszystkie domeny odblokowane." -ForegroundColor Green 

Skrypt End-Focus kończy działanie „Start-Focus.ps1”. Gdy zmienisz nazwę skryptu Start, pamiętaj o aktualizacji linii dopasowującej proces, w przeciwnym razie End nie zadziała prawidłowo.

Jak wcześniej, kliknij Zapisz jako, nazwij go End-Focus.ps1 i ustaw typ na Wszystkie pliki (.). Stwórz nowy skrót z ustawioną ścieżką na nowy plik i włącz „Uruchom jako administrator”. Gotowe. Uruchom skrypt, kiedy chcesz zakończyć sesję skupienia, a dostęp do stron internetowych będzie przywrócony, możesz otworzyć swoje aplikacje.

Koncentracja znów w Twoich rękach

To rozwiązanie proste, ale efektywne. Nie płacę za subskrypcje ani nie instaluję rozpraszających aplikacji, które monitorują każdy mój krok.na swoim urządzeniu. Konfiguracja może dawać w kość, ale gdy w końcu się do tego zabierzesz, wszystko działa jak w zegarku. Kliknij skrót na początku pracy i twoje urządzenie w mgnieniu oka odetnie cię od rozproszeń, zanim jeszcze zdążą cię wytrącić z rytmu.

Jeśli ciekawią Cię artykuły podobne do Przestałem płacić za aplikacje do skupienia po zbudowaniu tego skryptu PowerShell w systemie Windows, zajrzyj do kategorii Windows i odkryj jeszcze więcej interesujących treści.

Indeks
  1. Rozpraszające biuro – dystopia
    1. Dlaczego „po prostu skup się mocniej” nigdy nie zadziała
  2. Napisałem skrypt PowerShell, aby zablokować wszystkie rozproszenia
    1. Dwa skrypty dla prostego przełącznika on-off dla skupienia
  3. Jak działa skrypt
    1. Wszystko, czego potrzebujesz, aby zbudować to samodzielnie
    2. Koncentracja znów w Twoich rękach

Możesz być zainteresowany

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Go up