自动屏蔽特定进程网络脚本

wen 实用脚本 2

本文目录导读:

自动屏蔽特定进程网络脚本

  1. 方案一:批处理脚本(推荐)
  2. 方案二:PowerShell 脚本(更灵活)
  3. 使用说明
  4. 原理说明
  5. 注意事项
  6. 增强版:自动检测进程路径

批处理脚本(推荐)

@echo off
chcp 65001 >nul进程网络屏蔽工具
setlocal enabledelayedexpansion
:: ===== 请在此处配置需要屏蔽的进程名称(不含 .exe 后缀) =====
set "BLOCK_LIST=chrome firefox qq wechat"
:: 创建入站和出站规则
echo [信息] 正在创建防火墙规则屏蔽以下进程:
echo ----------------------------------------
for %%p in (%BLOCK_LIST%) do (
    echo  - %%p.exe
    netsh advfirewall firewall add rule name="BLOCK_%%p_IN" dir=in program="%%p.exe" action=block enable=yes >nul
    netsh advfirewall firewall add rule name="BLOCK_%%p_OUT" dir=out program="%%p.exe" action=block enable=yes >nul
)
echo ----------------------------------------
echo [完成] 规则已创建!
:: 列出已有规则
echo.
echo [信息] 当前已有屏蔽规则:
netsh advfirewall firewall show rule name=all | findstr /i "BLOCK_"
pause

PowerShell 脚本(更灵活)

# 配置需要屏蔽的进程列表
$blockList = @(
    "chrome.exe",
    "firefox.exe",
    "qq.exe",
    "wechat.exe"
)
# 检查管理员权限
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host "错误:需要以管理员身份运行!" -ForegroundColor Red
    pause
    exit 1
}
Write-Host "正在创建防火墙规则..." -ForegroundColor Green
foreach ($proc in $blockList) {
    $procName = $proc -replace '\.exe$', ''
    # 创建入站规则
    $ruleIn = New-NetFirewallRule -DisplayName "BLOCK_${procName}_IN" `
        -Direction Inbound `
        -Program "$env:ProgramFiles\$proc" `
        -Action Block `
        -Enabled True `
        -Profile Any
    # 创建出站规则
    $ruleOut = New-NetFirewallRule -DisplayName "BLOCK_${procName}_OUT" `
        -Direction Outbound `
        -Program "$env:ProgramFiles\$proc" `
        -Action Block `
        -Enabled True `
        -Profile Any
    Write-Host "  ✓ 已屏蔽: $proc" -ForegroundColor Yellow
}
Write-Host "`n全部规则创建完成!" -ForegroundColor Green
# 显示当前规则
Write-Host "`n当前屏蔽规则列表:" -ForegroundColor Cyan
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "BLOCK_*" } | Select-Object DisplayName, Direction, Enabled

使用说明

配置进程列表

  • 批处理(.bat):修改第7行的 BLOCK_LIST=chrome firefox qq wechat
  • PowerShell(.ps1):修改第3-8行的数组 $blockList

运行方式

  1. 右键点击脚本文件
  2. 选择 "以管理员身份运行"(必须!否则会失败)
  3. 确认用户账户控制(UAC)提示

恢复网络(如需)

:: 删除所有屏蔽规则
netsh advfirewall firewall delete rule name=all | findstr /i "BLOCK_"
# PowerShell 删除所有屏蔽规则
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "BLOCK_*" } | Remove-NetFirewallRule

原理说明

  • 通过 Windows 防火墙创建 入站出站 规则
  • 指定到特定可执行文件路径(默认在 Program Files 目录)
  • 如果程序在其他路径安装,规则可能失效

注意事项

  1. 必须管理员权限运行
  2. 如果程序安装在其他目录(非 Program Files),规则可能无效
  3. 某些程序可能通过服务(svchost.exe)连接网络,需要额外配置
  4. 屏蔽的是所有同名进程,建议指定完整路径以提高准确性

增强版:自动检测进程路径

$processes = @("chrome", "firefox")
foreach ($proc in $processes) {
    $paths = Get-Process -Name $proc -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Path -Unique
    if ($paths) {
        foreach ($path in $paths) {
            New-NetFirewallRule -DisplayName "BLOCK_$($proc)_$([guid]::NewGuid().ToString('N'))" `
                -Direction Outbound -Program $path -Action Block -Enabled True
            Write-Host "✓ 已屏蔽: $path"
        }
    } else {
        Write-Host "✗ 未找到进程: $proc" -ForegroundColor Red
    }
}

选择适合你的方案,建议先测试一下再应用到生产环境。

抱歉,评论功能暂时关闭!