批處理指令碼來修復並開啟Windows 7中的Windows Defender防火牆

suv789發表於2024-06-21
@echo off
echo 修復並開啟Windows Defender防火牆

:: 嘗試停止Windows Firewall服務
echo 停止Windows Firewall服務...
net stop mpssvc /y
echo.

:: 嘗試重新啟動Base Filtering Engine服務
echo 啟動Base Filtering Engine服務...
net start bfe
echo.

:: 啟動Windows Firewall服務
echo 啟動Windows Firewall服務...
net start mpssvc
echo.

:: 檢查服務狀態
echo 檢查Windows Firewall服務狀態...
sc query mpssvc | findstr /I /C:"RUNNING" && echo Windows Defender防火牆已成功啟動 || echo 無法啟動Windows Defender防火牆

echo 修復完成
pause
  1. 將檔案另存為 修復防火牆.bat

  2. 右鍵點選儲存的批處理檔案 修復防火牆.bat,然後選擇“以管理員身份執行”。

執行此指令碼後,它將嘗試停止並重新啟動Windows防火牆相關的服務,並驗證防火牆服務是否已成功啟動。


@echo off
echo 修復並開啟Windows Defender防火牆

:: 嘗試停止Windows Firewall服務
echo 停止Windows Firewall服務...
net stop mpssvc /y
echo.

:: 確保Base Filtering Engine服務正在執行
echo 確保Base Filtering Engine服務正在執行...
sc config bfe start= auto
sc start bfe
echo.

:: 確保Windows Defender防火牆服務設定為自動啟動
echo 設定Windows Defender防火牆服務為自動啟動...
sc config mpssvc start= auto
echo.

:: 嘗試重新啟動Windows Firewall服務
echo 啟動Windows Firewall服務...
net start mpssvc
echo.

:: 檢查服務狀態
echo 檢查Windows Firewall服務狀態...
sc query mpssvc | findstr /I /C:"RUNNING" && echo Windows Defender防火牆已成功啟動 || echo 無法啟動Windows Defender防火牆

echo 修復完成
pause

說明:

  • net stop mpssvc /y: 強制停止Windows Defender防火牆服務。
  • sc config bfe start= auto: 將Base Filtering Engine服務設定為自動啟動。
  • sc start bfe: 啟動Base Filtering Engine服務。
  • sc config mpssvc start= auto: 將Windows Defender防火牆服務設定為自動啟動。
  • net start mpssvc: 啟動Windows Defender防火牆服務。
  • sc query mpssvc | findstr /I /C:"RUNNING": 檢查Windows Defender防火牆服務是否正在執行。

這個批處理指令碼嘗試透過設定服務的啟動型別為自動,並重新啟動相關的服務來修復和啟動Windows Defender防火牆。執行時,請確保以管理員身份執行批處理檔案,以便執行系統級別的操作。


@echo off
setlocal enabledelayedexpansion

echo 修復並開啟Windows Defender防火牆

:: Function to check service status
:check_service_status
set "SERVICE_NAME=%1"
sc query %SERVICE_NAME% | findstr /I /C:"RUNNING" >nul
if %errorlevel% equ 0 (
    echo 服務 %SERVICE_NAME% 已啟動
) else (
    echo 服務 %SERVICE_NAME% 未啟動,嘗試啟動...
    net start %SERVICE_NAME%
    if %errorlevel% equ 0 (
        echo 服務 %SERVICE_NAME% 已成功啟動
    ) else (
        echo 無法啟動服務 %SERVICE_NAME%
    )
)
goto :eof

:: 停止Windows Defender防火牆服務
echo 停止Windows Defender防火牆服務...
net stop mpssvc /y
echo.

:: 確保Base Filtering Engine服務設定為自動啟動並啟動
echo 確保Base Filtering Engine服務正在執行...
sc config bfe start= auto
call :check_service_status bfe
echo.

:: 確保Windows Defender防火牆服務設定為自動啟動
echo 設定Windows Defender防火牆服務為自動啟動...
sc config mpssvc start= auto
echo.

:: 嘗試重新啟動Windows Defender防火牆服務
echo 啟動Windows Defender防火牆服務...
call :check_service_status mpssvc
echo.

:: 確保Windows防火牆依賴的其他服務正在執行
echo 檢查Windows防火牆依賴服務...
set DEP_SERVICES=RpcSs DcomLaunch PlugPlay
for %%s in (%DEP_SERVICES%) do (
    call :check_service_status %%s
)
echo.

:: 使用系統檔案檢查工具修復系統檔案
echo 使用系統檔案檢查工具修復系統檔案...
sfc /scannow
echo.

:: 檢查Windows Firewall服務狀態
echo 檢查Windows Defender防火牆服務狀態...
sc query mpssvc | findstr /I /C:"RUNNING" >nul
if %errorlevel% equ 0 (
    echo Windows Defender防火牆已成功啟動
) else (
    echo 無法啟動Windows Defender防火牆
)

echo 修復完成
pause

說明:

  1. 函式 check_service_status:用於檢查並啟動指定的服務。
  2. 停止防火牆服務net stop mpssvc /y 強制停止Windows Defender防火牆服務。
  3. 確保Base Filtering Engine服務自動啟動並啟動sc config bfe start= autocall :check_service_status bfe
  4. 確保Windows Defender防火牆服務自動啟動sc config mpssvc start= auto
  5. 檢查和啟動Windows Defender防火牆服務call :check_service_status mpssvc
  6. 檢查並啟動其他依賴服務:例如 RpcSsDcomLaunchPlugPlay
  7. 系統檔案檢查:使用 sfc /scannow 命令修復系統檔案。

批處理指令碼來修復並開啟Windows Defender防火牆,可以引入更多高階功能,如日誌記錄、錯誤處理、檢查服務依賴關係等。下面是一個更全面和專業的示例:

batCopy Code
@echo off
setlocal enabledelayedexpansion

:: 日誌檔案路徑
set LOGFILE=%~dp0firewall_repair_log.txt

:: 開啟日誌記錄功能
(
    echo ===============================
    echo 開始修復並開啟Windows Defender防火牆 - %date% %time%
    echo ===============================
) >> %LOGFILE%

:: 函式:日誌記錄
:log
echo %~1
echo %~1 >> %LOGFILE%
goto :eof

:: 函式:檢查服務狀態並啟動服務
:check_service_status
set "SERVICE_NAME=%1"
sc query %SERVICE_NAME% | findstr /I /C:"RUNNING" >nul
if %errorlevel% equ 0 (
    call :log "服務 %SERVICE_NAME% 已啟動"
) else (
    call :log "服務 %SERVICE_NAME% 未啟動,嘗試啟動..."
    net start %SERVICE_NAME%
    if %errorlevel% equ 0 (
        call :log "服務 %SERVICE_NAME% 已成功啟動"
    ) else (
        call :log "無法啟動服務 %SERVICE_NAME%"
    )
)
goto :eof

:: 停止Windows Defender防火牆服務
call :log "停止Windows Defender防火牆服務..."
net stop mpssvc /y
call :log "防火牆服務已停止"
call :log ""

:: 確保Base Filtering Engine服務設定為自動啟動並啟動
call :log "確保Base Filtering Engine服務正在執行..."
sc config bfe start= auto
call :check_service_status bfe
call :log ""

:: 確保Windows Defender防火牆服務設定為自動啟動
call :log "設定Windows Defender防火牆服務為自動啟動..."
sc config mpssvc start= auto
call :log ""

:: 嘗試重新啟動Windows Defender防火牆服務
call :log "啟動Windows Defender防火牆服務..."
call :check_service_status mpssvc
call :log ""

:: 確保Windows防火牆依賴的其他服務正在執行
call :log "檢查Windows防火牆依賴服務..."
set DEP_SERVICES=RpcSs DcomLaunch PlugPlay
for %%s in (%DEP_SERVICES%) do (
    call :check_service_status %%s
)
call :log ""

:: 使用系統檔案檢查工具修復系統檔案
call :log "使用系統檔案檢查工具修復系統檔案..."
sfc /scannow >> %LOGFILE%
call :log ""

:: 檢查Windows Firewall服務狀態
call :log "檢查Windows Defender防火牆服務狀態..."
sc query mpssvc | findstr /I /C:"RUNNING" >nul
if %errorlevel% equ 0 (
    call :log "Windows Defender防火牆已成功啟動"
) else (
    call :log "無法啟動Windows Defender防火牆"
)

call :log "修復完成"

:: 結束日誌記錄
(
    echo ===============================
    echo 修復結束 - %date% %time%
    echo ===============================
) >> %LOGFILE%

pause

說明:

  1. 日誌記錄:指令碼會將每個操作的輸出記錄到日誌檔案 %~dp0firewall_repair_log.txt,該檔案位於指令碼所在目錄。
  2. 函式 log:用於簡化日誌記錄過程。
  3. 函式 check_service_status:擴充套件了服務檢查與啟動功能,並增加了日誌記錄。
  4. 停止防火牆服務net stop mpssvc /y 強制停止Windows Defender防火牆服務。
  5. 確保Base Filtering Engine服務自動啟動並啟動sc config bfe start= autocall :check_service_status bfe
  6. 確保Windows Defender防火牆服務自動啟動sc config mpssvc start= auto
  7. 檢查並啟動Windows Defender防火牆服務call :check_service_status mpssvc
  8. 檢查並啟動其他依賴服務:例如 RpcSsDcomLaunchPlugPlay
  9. 系統檔案檢查:使用 sfc /scannow 命令修復系統檔案,並將輸出記錄到日誌檔案中。

此指令碼透過詳細的日誌記錄、更加靈活的錯誤處理機制和全面的服務依賴檢查,提升了修復和開啟Windows Defender防火牆的可靠性和可追溯性。執行時,請確保以管理員身份執行批處理檔案,以便執行系統級別的操作。


相關文章