私は Wi-Fi で古い Windows 7 システムを実行しており、リモート アクセスして監視しています。
問題は、Wi-Fi が予測不可能 (ルーターの奇妙な問題のため) であり、このシステムを 1 日中いつでもオンラインにしておく必要があることです。奇妙なことに、Wi-Fi が切断されると、まだ利用可能で Windows が再接続するように設定されているにもかかわらず、自動的に再接続されない傾向があります。
ここで同様の質問と回答を見つけましたが、それは有線ネットワークに関するもので、残念ながらその解決策は私のシステムでは機能しません。
これは、以下のように作成されたバッチ ファイルです。これを実行して、WiFi ルーターを強制終了し、ping を停止しましたが、インターフェイスをリセットする if ステートメントは完了しませんでした。コマンド ウィンドウには、ping がタイムアウトしたことが表示され、接続が再確立されるまでそれが繰り返されます。ログ ファイルにはエラーが記録されないため、if ステートメントのエラー部分に到達することはありません。元の「インターフェイス」変数を「ローカル エリア接続」から「ワイヤレス ネットワーク接続」に変更しました。
どなたかこの問題を解決できる方、またはネットワークが切断されたときにアダプタを自動的にリセットする代替オプションを提案できる方はいらっしゃいますか。これで問題が解決するようです。インターフェイスとして「ワイヤレス ネットワーク接続 (%SSID%)」を追加する必要がありますか?
ありがとう!
パンテラテアマ
@echo off
set INTERFACE="Local Area Connection"
set TIMEOUT=3600
set IP=8.8.8.8
set LOG="watchdog.log"
echo %DATE% %TIME%: Watchdog started >> %LOG%
:loop
rem First check the interface for an hour by pinging the Google DNS
rem and resetting the networking interface if it should fail.
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Connection failed. Restarting interface.. >> %LOG%
netsh interface set interface %INTERFACE% disable
netsh interface set interface %INTERFACE% enable
rem Give it another shot but restart the whole computer if it the
communication should still fail
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Still no connection. Restarting computer.. >> %LOG%
shutdown /r /c "Internet wathchdog"
echo %DATE% %TIME%: Waiting for system to shut down >> %LOG%
choice /T %TIMEOUT% /D Y /N > NUL
echo %DATE% %TIME%: Gave up on the shut down attempt. Trying again.. >>
%LOG%
goto :loop
答え1
TIMEOUT を 30 に変更します。これにより、接続が 30 秒間ダウンした場合にリセットを実行するように指示されます。それ以外の場合は、3600 秒間 (1 時間) ダウンしている必要があります。
また、この目的で 8.8.8.8 を使用しないでください。代わりに、 で見つかったゲートウェイ IP アドレスを使用する必要がありますipconfig
。8.8.8.8 などの外部 IP を使用すると、インターネットがダウンした場合などに、コンピューターは接続をリセットし、コンピューターを再起動し続けます。
ゲートウェイ アドレスのような内部 IP を使用すると、Wi-Fi 接続が実際にダウンした場合にのみリセットまたは再起動されます。
また、これをスケジュールされたタスクとして実行して、コンピュータの起動時に最高権限で実行することもできますnt authority\system
。ただし、ネットワーク スタックが完全に動作する前にスクリプトが実行される可能性があるため、タイムアウトを 300 秒など、もう少し長い値に変更することをお勧めします。
編集: コメントに記載されているように、質問に投稿されたスクリプトは単純に機能しません。元のスクリプトの問題は、ping コマンドが「xxx.xxx.xxx.xxx からの応答: 宛先ホストに到達できません」を返し、結果として「成功」エラー レベルになる可能性があることです。
以下は、正常に機能する更新されたスクリプトです。このスクリプトは、ダウンした接続をより効果的に検出するようにロジックを変更しています。また、コンピューターを再起動する部分も削除しました。これは不要であり、問題を引き起こす可能性があると感じています。このコマンドの実行中は、画面に何も出力されないことに注意してください。コマンドを使用して適切なネットワーク インターフェイス名が取得されていることを確認してくださいnetsh interface show interface
。
@echo off
REM Modified by Appleoddity - 10/11/2017
REM Fixed ping status check; Removed shutdown/reboot ability; Improved logging
REM This script MUST RUN AS ADMIN
REM
REM Obtain network interface name with 'netsh interface show interface'
REM
REM Change the INTERFACE; THRESHOLD; IP; and LOG variables below.
REM Note: THRESHOLD is not necessarily the number of seconds before reset - but close
REM
setlocal EnableDelayedExpansion
set INTERFACE="Wi-Fi"
set THRESHOLD=30
set IP=10.1.10.1
set LOG="watchdog.log"
echo %DATE% %TIME%: Watchdog started >> %LOG%
SET /A COUNT=0
REM Loop until <THRESHOLD> failed, consecutive pings are counted
:LOOP
ping -n 1 -w 1000 -l 0 %IP% | find /i " bytes=" >NUL 2>&1
if errorlevel 1 (
set /A COUNT+=1
echo %DATE% %TIME%: Failed ping detected - Count = !COUNT!. >> %LOG%
) ELSE (
set /A COUNT=0
REM Pause
ping -n 2 -w 1000 -l 0 127.0.0.1 >NUL 2>&1
)
if %COUNT% GEQ %THRESHOLD% (
echo %DATE% %TIME%: %THRESHOLD% failed pings exceeded. >> %LOG%
GOTO RESET
)
GOTO LOOP
REM Reset the network interface
:RESET
echo %DATE% %TIME%: Restarting network interface - %INTERFACE% >> %LOG%
netsh interface set interface "%INTERFACE%" admin=DISABLED >NUL 2>&1
netsh interface set interface "%INTERFACE%" admin=ENABLED >NUL 2>&1
SET /A COUNT=0
GOTO LOOP
答え2
もしあなたが「その名前のインターフェースはルーターに登録されていません」エラーが発生した場合、スクリプトで正しいネットワーク アダプターが選択されていないことを意味します。
バッチ/コマンドを管理者として実行していますか?
管理者権限があるかどうか確認したい場合は、以下を実行してください。翻訳元または
netsh interface show interface
これにより、アダプタのリストが表示されるので、アダプタ名に基づいて次のように記述します。
netsh interface set interface name="Local area connection" admin="disabled"
netsh interface set interface name="Wireless Network Connection" admin="disabled"
netsh interface set interface name="Local area connection" admin="enabled"
netsh interface set interface name="Wireless Network Connection" admin="enabled"
これにより、必要なアダプタがリセットされ、さらに & を使用してすべてを連結することができます。
netsh interface set interface name="Local area connection" admin="disabled" & netsh interface set interface name="Local area connection" admin="enabled"