「netsh trace」は「Wireshark」のように,設定したファイルサイズに区切って出力することはできない*1ので,定期的にファイルサイズを量ってキャプチャを停止/開始するような仕掛けを考えました.
停止から開始までの間はキャプチャできないのが最大の欠点です.
それと,「c:\capture_bat」に置かないと使えません*2.
「c:\capture_bat\logs」もあらかじめ作成しておきます.
- capture_start.bat
タスクスケジューラで定期的に(10分毎とか)「SYSTEM」ユーザで実行します.
「maxsize=100」「ago=4」「captureinterface="ワイヤレス ネットワーク接続"」は適宜調整します.
@set wDATE=%date:~-10,4%%date:~-5,2%%date:~-2,2% @set wTIME2=%time: =0% @set wTIME=%wTIME2:~0,2%%wTIME2:~3,2%%wTIME2:~6,2% @set maxsize=100 @set /A max2=%maxsize%*1000*1000 @set ago=4 C: cd C:\capture_bat echo. >> capture_start.log echo %date% %time% >> capture_start.log call :capture_start FOR %%F IN ("logs\\%computername%.etl") DO set /A fsize=%%~zF echo if %fsize% geq %max2% >> capture_start.log if %fsize% geq %max2% ( echo "STOP!!" >> capture_start.log netsh trace stop ren "logs\\%computername%.etl" "%computername%_%wDATE%%wTIME%.etl" ren "logs\\%computername%.cab" "%computername%_%wDATE%%wTIME%.cab" forfiles /P logs /D -%ago% /M "*.etl" /C "cmd /c del @file" forfiles /P logs /D -%ago% /M "*.cab" /C "cmd /c del @file" call :capture_start ) else ( echo "Continue!!" >> capture_start.log ) goto end :capture_start netsh trace start capture=yes captureinterface="ワイヤレス ネットワーク接続" maxsize=0 fileMode="append" traceFile="logs\\%computername%.etl" >> capture_start.log exit /b :end
- netsh_show.bat
「captureinterface="ワイヤレス ネットワーク接続"」に指定する文字列を探すバッチです.
これは,ダブルクリックで実行でよいです.
netsh trace show interfaces pause
-
- 実行するとこんな感じ.ウチのPCだと,「ワイヤレス ネットワーク接続」ばかり使用ですが,複数指定も可能(「captureinterface=("ローカル エリア接続","ワイヤレス ネットワーク接続")」)とのこと.
C:\capture_bat>netsh trace show interfaces ワイヤレス LAN アダプター ワイヤレス ネットワーク接続: 説明: Broadcom 802.11n ネットワーク アダプタ インターフェイス GUID: {26BECD34-61E5-46D3-934B-C1C1E8D65C78} インターフェイス インデックス: 12 インターフェイス LUID: 0x47000000000000 イーサネット アダプター ローカル エリア接続: 説明: Broadcom NetLink (TM) Gigabit Ethernet インターフェイス GUID: {8F864D88-47E9-413E-A02A-C7AB4105331A} インターフェイス インデックス: 11 インターフェイス LUID: 0x6000006000000 トンネル アダプター isatap.airport: 説明: Microsoft ISATAP Adapter インターフェイス GUID: {10EC6274-46C7-4E78-9902-9E948ADAA10D} インターフェイス インデックス: 18 インターフェイス LUID: 0x83000004000000 トンネル アダプター isatap.{8F864D88-47E9-413E-A02A-C7AB4105331A}: 説明: Microsoft ISATAP Adapter #2 インターフェイス GUID: {A508FAC0-A032-40D9-A749-3996B1858C97} インターフェイス インデックス: 17 インターフェイス LUID: 0x83000005000000 トンネル アダプター Teredo Tunneling Pseudo-Interface: 説明: Teredo Tunneling Pseudo-Interface インターフェイス GUID: {C7D5FE97-65A5-4065-A078-8A671220C870} インターフェイス インデックス: 14 インターフェイス LUID: 0x8300000A000000 C:\capture_bat>pause 続行するには何かキーを押してください . . .
- capture_stop.bat
これもタスクスケジューラに「SYSTEM」ユーザで登録しておきます.
繰り返しはしません. 登録するだけでスケジュールはしません.
使い方は後述です.
netsh trace stop
- キャプチャの止め方
「capture_start.bat」のタスクを「無効」にした後、「capture_stop.bat」のタスクを実行します.
「無効」にするのは,「繰り返し実行」だからです. 10分後とか翌日とかに実行されるとキャプチャがまた始まってしまいます.
「無効」にしても,現在のキャプチャは実行中なので,「capture_stop.bat」を「タスクスケジューラ」から実行します. ダブルクリックで実行してもダメです.
検証したところ,「capture_start.bat」「capture_stop.bat」は同じユーザでなければならないようで,面倒ですが両方を同じユーザでタスクスケジューラに登録することにしました.