@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
-
將檔案另存為
修復防火牆.bat
。 -
右鍵點選儲存的批處理檔案
修復防火牆.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
說明:
- 函式
check_service_status
:用於檢查並啟動指定的服務。 - 停止防火牆服務:
net stop mpssvc /y
強制停止Windows Defender防火牆服務。 - 確保Base Filtering Engine服務自動啟動並啟動:
sc config bfe start= auto
和call :check_service_status bfe
。 - 確保Windows Defender防火牆服務自動啟動:
sc config mpssvc start= auto
。 - 檢查和啟動Windows Defender防火牆服務:
call :check_service_status mpssvc
。 - 檢查並啟動其他依賴服務:例如
RpcSs
、DcomLaunch
和PlugPlay
。 - 系統檔案檢查:使用
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
說明:
- 日誌記錄:指令碼會將每個操作的輸出記錄到日誌檔案
%~dp0firewall_repair_log.txt
,該檔案位於指令碼所在目錄。 - 函式
log
:用於簡化日誌記錄過程。 - 函式
check_service_status
:擴充套件了服務檢查與啟動功能,並增加了日誌記錄。 - 停止防火牆服務:
net stop mpssvc /y
強制停止Windows Defender防火牆服務。 - 確保Base Filtering Engine服務自動啟動並啟動:
sc config bfe start= auto
和call :check_service_status bfe
。 - 確保Windows Defender防火牆服務自動啟動:
sc config mpssvc start= auto
。 - 檢查並啟動Windows Defender防火牆服務:
call :check_service_status mpssvc
。 - 檢查並啟動其他依賴服務:例如
RpcSs
、DcomLaunch
和PlugPlay
。 - 系統檔案檢查:使用
sfc /scannow
命令修復系統檔案,並將輸出記錄到日誌檔案中。
此指令碼透過詳細的日誌記錄、更加靈活的錯誤處理機制和全面的服務依賴檢查,提升了修復和開啟Windows Defender防火牆的可靠性和可追溯性。執行時,請確保以管理員身份執行批處理檔案,以便執行系統級別的操作。