Descubre cómo crear un script de PowerShell para bloquear distracciones digitales y mejorar tu concentración, sin aplicaciones invasivas ni suscripciones costosas. ¡Tu enfoque en tus manos!
¿Constantemente distraído, a pesar de plazos apremiantes? No eres el único. El mundo digital brilla con tal atractivo que se ha convertido en un campo de batalla de distracciones. Aquí entró yo, decidido a combatir el caos con un script de PowerShell.
La distractora distopía del escritorio
Por qué "solo concéntrate más" nunca funcionó
Algunos afirman que el problema de distraerse es sólo falta de disciplina. Más fácil de decir que de hacer, especialmente con la avalancha de información en línea. Mi situación es complicada; como escritor digital, frecuentemente justifico horas consumiendo contenido bajo la excusa de "investigación".
La procrastinación se ha vuelto una sombra persistente, así que decidí actuar. Empecé con bloqueadores de sitios web, que aunque útiles, solo limitan navegadores. Las aplicaciones como Discord y Slack son tan tentadoras en mi pantalla como cualquier página web.
Algunas herramientas limitan aplicaciones de escritorio, pero la confianza no es su fuerte. Instalarlas significa dar acceso a lo que sucede en mi máquina. Mis reservas sobre los bloqueadores de sitios web son similares.
Busqué una solución local, idealmente de código abierto, que me permita controlar acceso a aplicaciones y sitios. Frustrado por la falta de opciones, decidí crear la mía.
Escribí un script de PowerShell para bloquear todas las distracciones
Dos scripts para crear un interruptor de encendido y apagado limpio para el enfoque
Mi solución: dos scripts de PowerShell. Start-Focus.ps1 se ejecuta manualmente cuando necesito concentración; End-Focus.ps1 marca el final.
El primero cierra aplicaciones que he designado como distracciones: Discord, Slack y Steam. Además, corre en segundo plano, monitoreando procesos cada 60 segundos. Si vuelvo a abrir uno de esos programas, el script lo cierra de inmediato.
Edita también el archivo hosts de Windows, redirigiendo sitios distractores a 127.0.0.1, bloqueándolos en todos los navegadores. Al concluir la sesión de enfoque, corro el script End-Focus, que elimina los bloqueos y limpia la caché DNS, restaurando el acceso al instante.
Prefiero ejecutar los scripts manualmente, aunque se pueden programar con el Programador de tareas para sesiones automáticas.
Cómo funciona el script
Todo lo que necesitas para construirlo tú mismo
Crea una carpeta para tus scripts de PowerShell. Yo uso C:\Projects\PowerShell Scripts\. Luego, genera un nuevo archivo de texto y pega el siguiente script:
$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 "Por favor, ejecuta este script como Administrador." -ForegroundColor Red exit } foreach ($domain in"```powershell
$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 "Sesión de enfoque iniciada. Dominios bloqueados." -ForegroundColor Green
Write-Host "Presiona Ctrl+C o ejecuta End-Focus.ps1 para terminar la sesión.`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 "Cerrado: $app" -ForegroundColor Red
}
}
Start-Sleep -Seconds $checkInterval
}Los nombres de las aplicaciones en la configuración tienen que ser exactamente los mismos que usa Windows.
Para encontrar el nombre correcto, abre la aplicación y accede al Administrador de tareas (Ctrl + Shift + Esc). Haz clic derecho sobre el proceso y selecciona "Ir a detalles." Utiliza el nombre visible sin la extensión .exe.
Haz clic en "Guardar como" y elige el nombre Start-Focus.ps1. Asegúrate de seleccionar "Todos los archivos (.)" en "Guardar como tipo" para evitar que se guarde como un archivo de texto.
Crea un acceso directo donde prefieras con la siguiente estructura:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "<Ruta a Start-Focus.ps1>" Reemplaza <Ruta a Start-Focus.ps1> con la ruta real. Por ejemplo:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Projects\PowerShell Scripts\Start-Focus.ps1" Después, haz clic derecho en el acceso directo, dirígete a Propiedades y luego a Avanzado en la pestaña de Acceso directo. Marca "Ejecutar como administrador." Esto es crucial porque el script modifica el archivo hosts que requiere esos privilegios.
Has configurado correctamente el script Start Focus. Doble clic en el acceso directo y tendrás el script bloqueando todas las aplicaciones y sitios designados.
Al ejecutar el script, aparecerá una ventana de terminal. Si cierras esa ventana, el script se detendrá. No podrá volver a cerrar las aplicaciones distractoras si las abres accidentalmente.
Ahora, para finalizar, vuelve a la carpeta donde guardaste Start-Focus.ps1. Crea un nuevo archivo de texto y copia lo siguiente:
$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 "Por favor, ejecuta este script como administrador." -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 "Proceso Start-Focus terminado." -ForegroundColor Yellow
}
Write-Host "Sesión de enfoque finalizada. Todos los dominios desbloqueados." -ForegroundColor Green El script End-Focus está diseñado para finalizar "Start-Focus.ps1." Si cambias el nombre del script de inicio, actualiza la línea de coincidencia en consecuencia, o el script de finalización no funcionará.
De nuevo, guarda el archivo como End-Focus.ps1 y asegúrate de que "Guardar como tipo" esté configurado en Todos los archivos (.). Después, crea un acceso directo siguiendo el mismo proceso anterior, apuntando a este nuevo archivo y configurándolo para "Ejecutar como"...
Ejecuta este script para cerrar tu sesión de enfoque. De inmediato, podrás acceder a todos los sitios y abrir todas las aplicaciones.
Tu enfoque en tus manos
No es la configuración más sofisticada, pero funciona. Sin suscripciones ni aplicaciones invasivas. Es cierto, la instalación tiene su complicación, pero al final, el flujo es limpio. Un clic en el acceso directo y tu máquina se prepara para bloquear distracciones, manteniéndote en el camino correcto.
Si deseas encontrar artículos similares a Dejé de pagar por aplicaciones de enfoque después de construir este script de Windows PowerShell, te sugerimos revisar la categoría Windows.

Deja una respuesta