none
Wi-Fi接続状態を判定するバッチコマンド教えて RRS feed

  • 質問

  • 【現状】
    MyPC:Windows 10 Version 1909(Build 18363.535)です。
    Windows 7 から Windows 10 に無償バージョンアップした時からPC起動時に無線LANがつながらない現象が頻繁に発生。その都度、タスクバーの無線マークを右クリックし、「問題のトラブルシューティング」をしていました。
    苦肉の策として、PC起動時常に無線LAN「アダプタをリセットする」次のバッチファイルを「タスクスケジューラー」で自動実行しています。
    <WiFiReset.BAT>
    netsh interface set interface "Wi-Fi" disable
    netsh interface set interface "Wi-Fi" enabled
    【やりたい事】
    今現在はPC起動の都度、上記コマンドを実行しているのですが、無線LANが接続できなかった場合のみ実行する条件式を当該バッチファイルに組み込みたいのですが、サンプルコードを教えて下さい。
    追記:タスクバーに表示されるWi-Fi接続状態のアイコンが「地球印」か否かで判定可能でしょうか?…何れにしろ判定方法のコードは非力にて分かりません。
    ご教授よろしくお願いいたします。
    【補足資料】
    図1は、PC起動時常に無線LANの、接続ができていなかった時の状態です。
    図2は、--〃-- 、接続が正常にできていた時 --〃--


    sakuraxx

    2019年12月20日 7:25

回答

  • netsh interface show interface で、Stateが取れるので、これで判断できるかもしれません。
    PowerShellだとNetworkInterfaceクラスに、接続されているか否かのメソッドがあります。
    いずれも、リンクアップしていれば有効になるはずです。

    ただそれより、無線LANにつながらない現象そのものをどうにかしたいですね…

    2019年12月23日 5:54
  • だとしたら、 WlanSvc が依存している nsi サービスか、さらにその先の nsiproxy ドライバの状態に違いがあるんだと思います。
    例えば、nsi サービスや nsiproxy ドライバの開始/ロード タイミングに遅延が発生し、その影響で PC 起動直後の自動接続に失敗している可能性が考えられます。
    • 回答としてマーク sakuraxx 2020年1月9日 14:47
    2020年1月8日 1:24
  • お馬鹿さん、新年早々ご多忙のところ大変お世話になりました…感謝
    試行:関係あるか否か定かではありませんが、
    PC譲受当初に良かれと思い設定した「SMB」を元に戻して様子を見てみましたが改善されませんでした。
    やはりレガシーPCにはWindows10は不釣合なのかも知れません。
    回避策として、タスクスケジューラー(PC起動時)で次のバッチを走らせる事にします。
    <WiFiReset3.BAT>
    @echo off
    ping google.com | findstr "パケット数:" > nul
    if %errorlevel% equ 0 EXIT
    netsh wlan set profileparameter name=WiFiProfile001 keymaterial=kye0123456789 connectionmode=auto
    netsh interface set interface "Wi-Fi" disable
    netsh interface set interface "Wi-Fi" enabled


    sakuraxx

    • 回答としてマーク sakuraxx 2020年1月9日 14:55
    2020年1月9日 14:46

すべての返信

  • netsh interface show interface で、Stateが取れるので、これで判断できるかもしれません。
    PowerShellだとNetworkInterfaceクラスに、接続されているか否かのメソッドがあります。
    いずれも、リンクアップしていれば有効になるはずです。

    ただそれより、無線LANにつながらない現象そのものをどうにかしたいですね…

    2019年12月23日 5:54
  • sakuraxxさん、こんにちは。フォーラムオペレーターのクモです。 
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    Iwasyさんから寄せられた投稿はお役に立ちましたか。

    参考になった投稿には [回答としてマーク] をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年12月24日 1:52
    モデレータ
  • Iwasy さん、助言どうも有難うございます。
    ご指摘の通り無線LANにつながらない事を解決するのが寛容と思います。
    既にMicrosoftヘルプ対応済みで、結果:古いパソコンのためWiFiドライバーがWindows10に対応していないのではとの見解でした。
    止むを得ず恒久対策にはなりませんが、暫定処置としてWiFi接続(回復)をバッチで自動化しようという試みです。

    悪戦苦闘の末なんとか次の試行を終えました…結果:「試行5」が最も適当な判定方法に思えました。
    更なる助言が有れば何卒よろしくお願いします。

    試行1.WiFi接続状態チェック
    netsh interface show interface "Wi-Fi" | find "接続状態:             接続" > nul

    試行2.イーサネットか調べる
    for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address ^| findstr "イーサネット"`) do @set INTERFACE="イーサネット"

    試行3.ローカル エリア接続か調べる
    for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address ^| findstr "ローカル エリア接続"`) do @set INTERFACE="ローカル エリア接続"

    試行4.IPアドレスを調べる
    for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address !INTERFACE! ^| findstr "IP アドレス" ^| findstr /n /r "."`) do @set IP=%%k

    試行5.pingの結果を調べる
    ping google.com | findstr "パケット数:" > nul

    【運用】<WiFiReset2.BAT>
    @echo off
    ping google.com | findstr "パケット数:" > nul
    if %errorlevel% equ 0 EXIT
    netsh interface set interface "Wi-Fi" disable
    netsh interface set interface "Wi-Fi" enabled


    sakuraxx

    2019年12月29日 10:25
  • これ、バッチファイルで云々よりもなぜ接続障害が発生するのか、その原因を調査した方がいいのでは?

    書かれている現象を読む限り、Wi-Fi ネットワーク インターフェースの初回バインド時にのみエラーが発生しているように見えますが、だとしたら NDIS 関連のフィルター ドライバの影響かもしれません。

    以下のコマンドで、インストールされているネットワーク関連ドライバを確認されることをおすすめします。

    netcfg -s n

    2019年12月30日 2:08
  • お馬鹿さん、助言ありがとうございます。過去にも大変お世話になり感謝しております。
    次の事を試みましたが問題らしき事は見つかりません…ギブアップです。
    ・インテルドライバーの自動検索「Intel Driver & Support Assistant」を実行したが新しいものは在りませんでした。2017/11/30以降の改訂版は無いようです。
    ・デバイスマネージャーのネットワークアダプターの「intel(R) PRO/Wireless 3945ABG Network Connection」など計11本は、全て「このデバイスは正常に動作しています」と表示されていました。
    本来なら念のため「削除・更新」を試みたかったのですが、
    当該パソコン「SONY VGN-TZ72B (PCG-4N7N)」は、ダウンロードの提供が「2017年11月30日」に終了していたため思い止まりました。
    やはりレガシーなパソコンにインストールされているドライバーは古くて、Windows10との相性が悪いのでしょうか?

    sakuraxx


    • 編集済み sakuraxx 2019年12月30日 11:28
    2019年12月30日 11:23
  • 管理者権限でコマンド プロンプトを起動させ、下記コマンドを実行し、その出力結果をここにコピペしてください 。

    netcfg  -s n

    ちなみに私は貧乏なので、10年以上昔の PC に Windows 10 をインストールして使い続けております。

    そもそもハードウェアの制限で問題が起きるのであれば、インストールの時点で弾かれるはずであり、OS をインストールできるのであれば問題はソフトウェア構成にあり、それを解決できれば使えるはず。。。。というのが私の信念です。

    あと蛇足ですけど、プログラム的な解決策を望むのであれば、Native Wi-fi API を使ったプログラムを書いた方が早いような気がします。(サンプルはググればいっぱい出てくるし。)

    P.S.

    Bluetooth Tethering も利用してるみたいだけど、なんで?

    • 編集済み お馬鹿 2019年12月30日 13:37
    2019年12月30日 13:10
  • Microsoft Windows [Version 10.0.18363.535]
    (c) 2019 Microsoft Corporation. All rights reserved.
    C:\WINDOWS\system32>cd \
    C:\>netcfg -s n

    Network Adapters
    -----------------
    pci\ven_11ab&dev_4363&subsys_900e104d Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller
    pci\ven_8086&dev_4222&subsys_10538086 Intel(R) PRO/Wireless 3945ABG Network Connection

    Network Protocols
    -----------------
    ms_rdma_ndk                Microsoft RDMA - NDK
    ms_tcpip                   インターネット プロトコル バージョン 4 (TCP/IPv4)
    ms_netbt                   WINS Client(TCP/IP) Protocol
    ms_implat                  Microsoft Network Adapter Multiplexor Protocol
    ms_ndiswanlegacy           リモート アクセス レガシ NDIS WAN ドライバー
    ms_lldp                    Microsoft LLDP プロトコル ドライバー
    ms_wanarp                  Remote Access IP ARP Driver
    ms_tcpip_tunnel            インターネット プロトコル (TCP/IP) - トンネル
    ms_tcpip6_tunnel           Microsoft TCP/IP version 6 - トンネル
    ms_tcpip6                  インターネット プロトコル バージョン 6 (TCP/IPv6)
    ms_rspndr                  Link-Layer Topology Discovery Responder
    ms_pppoe                   PPPoE (Point to Point Protocol over Ethernet)
    ms_wanarpv6                Remote Access IPv6 ARP Driver
    ms_netbt_smb               Message-oriented TCP/IP Protocol (SMB session)
    ms_ndisuio                 NDIS Usermode I/O プロトコル
    ms_ndiswan                 Remote Access NDIS WAN Driver
    ms_lltdio                  Link-Layer Topology Discovery Mapper I/O Driver
    netvsc_vfpp                Microsoft NetVsc Failover VF Protocol
    ms_xboxgip                 Xbox Game Input Protocol Driver

    Network Services
    -----------------
    ms_netbios                 NetBIOS Interface
    ms_server                  Microsoft ネットワーク用ファイルとプリンター共有
    ms_bridge                  Microsoft MAC Bridge
    ms_wfplwf_lower            WFP Native MAC レイヤー ライトウェイト フィルター
    ms_vwifi                   @%windir%\System32\drivers\vwififlt.sys,-105
    ms_pacer                   QoS パケット スケジューラ
    ms_wfplwf_upper            WFP 802.3 MAC レイヤー ライトウェイト フィルター
    ms_nativewifip             NativeWiFi Filter
    ms_ndiscap                 Microsoft NDIS キャプチャ

    Network Clients
    -----------------
    ms_msclient                Microsoft ネットワーク用クライアント
    C:\>


    • 編集済み sakuraxx 2019年12月31日 1:36 不要なスペース行を削除しました。
    2019年12月31日 1:33
  • 当該PCは知人から譲受けたとき既にWindows10がインストールされていました。
    推定:譲渡直前に回復「このPCをリセットする」「全て削除する」が行われた様に思います。譲渡者は脳梗塞で入院中のため詳細を伺う事が出来ません。
    <Bluetooth Tethering も利用してるみたいだけど、なんで?> …解りません!?
    <Native Wi-fi API> …C,C++非力にて私にはハードルが高すぎます。
    【参考】
    手動でWiFi回復を、[設定]→[ネットワークとインターネット]→[状態]未接続→[トラブルシューティング]を行った際の「Windows ネットワーク診断 発行元の詳細」を下記にコピペします。…但し適当な時期に下記は削除します。
    ------記---------------------------------------------------
    トラブルシューティング
    Windows ネットワーク診断 発行元の詳細 …削除しました(2020/01/02)。


    sakuraxx


    • 編集済み sakuraxx 2020年1月2日 5:26
    2019年12月31日 4:26
  • とりあえず netcfg コマンドの出力結果では、怪しそうなフィルタは有りませんね。。。。

    ついでに下記コマンドも実行して、生成された filters.xml の内容をコピペしてもらえますか?

    netsh wfp show filters 

    2020年1月2日 4:04
  • 上記返信・・・あれ、れ、れ、~ 「スパムフィルター」が掛かってしまった…何故!?

    ★生成された filters.xml の内容をコピペしようと何度か試みたのですが行数が大きいせいか…コピペ失敗。
     次の個人サイトへ投稿しました…よろしくお願いいたします。
    https://1drv.ms/f/s!AgkOkYM8b6nQglfb5r3UwE8o5Q3z


    sakuraxx

    2020年1月2日 7:25
  • 「Migiration User 1」はシステム上のユーザー名だと思われるので、そういう人がいるわけではありません。
    このユーザーが投稿した扱いの投稿を見れば、世界中の言語で投稿していることになるので。
    (あくまで、フォーラム上の投稿を観察した結果で述べているので、システム的にこのユーザー扱いになるのがどういうときかは存じませんが…)
    2020年1月3日 8:13
    モデレータ
  • アップしてもらった "filters.xml" を確認しましたが、Wi-Fi Direct の ASP に関するログがありませんね。。。。なんでだろう?
    なにか必要なサービスが停止状態にあるのかもしれません。
    タスクマネージャの [サービス] タブで下記サービスの、接続失敗/接続成功それぞれのタイミングでの状態に差異があるか、確認してみてください。
    ---------------------------------------------
    <タスクマネージャで状態を確認するサービス>
    ☆ WFDSConMgrSvc
    ☆ dot3svc
    ☆ WlanSvc
    ---------------------------------------------
    2020年1月6日 2:11
  • タスクマネージャの [サービス] タブで下記サービスの、
    接続失敗/接続成功それぞれのタイミングでの状態に差異があるか、確認してみてください。★5回確認…差異なし
    <タスクマネージャで状態を確認するサービス>
    名前          接続失敗 接続成功
    ☆dot3svc       停止    停止
    ☆WFDSConMgrSvc  停止    停止
    ☆WlanSvc       実行中   実行中

    sakuraxx

    2020年1月7日 11:20
  • だとしたら、 WlanSvc が依存している nsi サービスか、さらにその先の nsiproxy ドライバの状態に違いがあるんだと思います。
    例えば、nsi サービスや nsiproxy ドライバの開始/ロード タイミングに遅延が発生し、その影響で PC 起動直後の自動接続に失敗している可能性が考えられます。
    • 回答としてマーク sakuraxx 2020年1月9日 14:47
    2020年1月8日 1:24
  • お馬鹿さん、新年早々ご多忙のところ大変お世話になりました…感謝
    試行:関係あるか否か定かではありませんが、
    PC譲受当初に良かれと思い設定した「SMB」を元に戻して様子を見てみましたが改善されませんでした。
    やはりレガシーPCにはWindows10は不釣合なのかも知れません。
    回避策として、タスクスケジューラー(PC起動時)で次のバッチを走らせる事にします。
    <WiFiReset3.BAT>
    @echo off
    ping google.com | findstr "パケット数:" > nul
    if %errorlevel% equ 0 EXIT
    netsh wlan set profileparameter name=WiFiProfile001 keymaterial=kye0123456789 connectionmode=auto
    netsh interface set interface "Wi-Fi" disable
    netsh interface set interface "Wi-Fi" enabled


    sakuraxx

    • 回答としてマーク sakuraxx 2020年1月9日 14:55
    2020年1月9日 14:46
  • 先の返信で書き忘れたので、補足しておきます。

    可能性は低いと思いますが、もしかしたら nsi サービスおよび nsiproxy ドライバの開始/ロード タイミングのレジストリ情報が、書き変わっている可能性も考えられます。
    下記レジストリ キーの "Start" エントリの値を確認されることをお勧めします。

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsi]
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsiproxy]

    デフォルト設定では、"nsi" キーの "Start" は 2、"nsiproxy" "Start" は 1 のはずです。
    2020年1月10日 2:20
  • お馬鹿さん、重ね重ねご教授ありがとうございます。
    私事で10日ほど留守にしていて返信に気が付くのが遅くなり「レジストリ キー」の確認が今日になってしまいました。
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsi]         →"nsi"        の"Start"は 2
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nsiproxy] →"nsiproxy"の"Start"は 1
    でした。"Start" エントリの値は正常の様です。

    sakuraxx

    2020年1月22日 13:45
  • 追記するの忘れてましたが、下記レジストリの値も確認してもらえますか?

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NativeWifiP]
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vwififlt]

    デフォルト設定では、"NativeWifiP" キーの "Start" は 3、"vwififlt" "Start" は 1 のはずです。

    あと本件とは関係ありませんが。。。。
    以前に提示してもらったデバイス マネージャーのスナップショットを見ると Bluetooth Tethering 用のドライバがロードされているのですが、この機能は使っていないとのことなので、無効にしておいた方が良いと思います。
    (僅かとはいえ、無駄にメモリを浪費しているので。)
    デバイス マネージャーの "ネットワーク アダプター" 配下にある "Bluetooth Device (Personal Area Network)" を「無効」にすれば、このドライバのロードを抑止できます。
    2020年1月23日 2:47