treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Windows8以降でもAP(SSID)の優先順位を設定したい

Windows8(8.1)で簡単に無線LANの接続順を変更する方法をご報告します。
概要は、無線LANの接続順をしょっちゅう変更するけども、コマンドが覚えられない(or面倒な)人向けの方法として、対話型で無線LANの接続設定を変更できるようにする方法です。

ややいまさらな感もありますが、Windows8以降のWindowsOSではWindows7にあった「ワイヤレスネットワークの管理」がありません。
Windows7ではコントロールパネルから「ネットワークと共有センター」を選択して、左ペインの「ワイヤレスネットワークの管理」を選択すると接続先として登録した無線LAN(のSSID)の一覧が表示されました。
またこの画面では無線LANネットワーク(SSID)の追加、削除に加え、優先順位がありました、優先順位を決めておくと、上にあるSSIDほど優先され下にあるSSIDが接続可能であっても上にあるSSIDの無線APに接続される、という動きをしてくれるというものです。
PCの管理者(キッティング作業者)としては、ここに無線LANSSIDを一通り登録しておいて優先順位を予め設定して(並べて)おくことでユーザが意識せずに自動的にユーザがPCを使う場所で必要な無線LAN(のSSID)に接続するよう作りこんでおく、ということができました。
で、Windows8以降(8.1もたぶんWindows10も)ではこの画面がなくなってしまいました。(あまり使われなかったのでしょうか?)

無線LANSSID)追加程度であれば、GUIでできますのでそれほど苦労はないと思いますが、無線LANSSID)への接続優先順位を設定しておくにはCUIが必要になります。
そうです。いちいちコマンドプロンプトを起動して、netshコマンドからwlanコンテクストメニューに入って、必要なコマンドを実行します。

しかし、このnetshコマンド、子コマンドが多く構文が長くなりがちで、暗記するといってもそれほど使う頻度は少ないから暗記しようにも今一つピンときません。
たとえば、今のSSIDを優先順位の順番で表示させるコマンドは
 netsh wlan show profiles
と入力します。設定するには
 netsh wlan set profileorder name="無線LANプロファイル名" interface="Wi-Fi" priority=順位(数字)
と入力します。一つ一つの単語は分かりやすいのですが、長くて覚えられません。
そこでバッチファイルです。
バッチファイルを作ってみました。
このバッチファイルを使うと、コマンドを記憶していなくても以下のことが可能になります。

  1. 設定済み接続先SSID無線LANネットワーク名)一覧が閲覧できる
  2. 接続するSSIDの優先順位を入れ替えできる
  3. 不要になったSSIDを削除できる

この3点ができるようになります。

条件:

  1. バッチファイルとnetshコマンドが実行できる環境であること
  2. ネットワーク接続画面の無線LANのアダプタ表示が「Wi-Fi」となっていること。(デフォルトの「Wi-Fi」から変更していないこと。変更している場合にはバッチファイル中の「Wi-Fi」表記をご自分の環境に合わせて書き換えます。)


利用前に以下の点につきましてはご了承ください。
このバッチファイルを用いて行う一切の行為、被った損害・損失に対しては、一切の責任を負いかねます。バッチファイルの内容ないし動作をご理解の上ご利用ください。

さて、くだんのバッチファイルは文末に記載していますので、コピペして自分の分かるファイル名.batで保存してください。
(※バッチファイルの中身が見たい方は先に文末のバッチファイルをご確認ください。)



簡単な使い方を記載しておきます。

バッチファイルを実行すると、まずメインメニューがでます。
----------------メニュー----------------
[1] 登録済み無線APの優先順位を確認
[2] 無線APの優先順位の変更
[3] 登録済みの無線LANプロファイル削除
[4] この処理を終了する
-----------------------------------------
このメニューでやりたいことを選びます。まずは「[1] 登録済み無線APの優先順位を確認」を選択して、今のSSID一覧を確認します。
今のSSID一覧から操作(編集)したいSSIDをコピペなどで控えておきます。
※例えば以下のような画面が表示されます。ここのAccessPoint-Bなどをコピペで控えておきます。
------------------------画面例1------------------------
ユーザー プロファイル
---------------------
    すべてのユーザー プロファイル     : AccessPoint-A
    すべてのユーザー プロファイル     : AccessPoint-B
    すべてのユーザー プロファイル     : AccessPoint-C
------------------------画面例1------------------------
この例だとAccessPoint-Aが最優先で接続されます。これをAccessPoint-B最優先となるよう変更するという仮定で操作方法を説明します。
何かキーを押してメニューに戻ったのち「[2] 無線APの優先順位の変更」を選択します。
「優先順位を変更するプロファイル名を入力します。 >」と表示されるので、先ほどコピペしたSSIDをペーストなどで入力しEnterキーを押下します。
続けて「このプロファイルの優先順位を数字で入れてください。 >」と表示されるので、優先順位を入力します。※優先順位は上から1/2/3…となっており、選択した優先順位に指定したSSIDが挿入されます。ここでは最優先にするので「1」を入力しEnterを押下します。
続けて確認メッセージとともに、実行確認メッセージ「変更の実行は[Y]をキャンセルは[N]を入力しEnterキーを押下します。 >」が表示されます。確認メッセージで「Y」を入力してEnterを押下します。
ここまでの操作をすると以下の画面例のような操作になります。
------------------------画面例2------------------------
----------------メニュー----------------
[1] 登録済み無線APの優先順位を確認
[2] 無線APの優先順位の変更
[3] 登録済みの無線LANプロファイル削除
[4] この処理を終了する
-----------------------------------------
実行する処理が記載された番号を入力してください >2
優先順位を変更するプロファイル名を入力します。 >AccessPoint-B
このプロファイルの優先順位を数字で入れてください。 >1
このホスト(PC1)で利用する無線LANプロファイルAccessPoint-Bの
優先順位を1に変更します。よろしいですか?
※キャンセル時にはメインメニューに戻ります。
変更の実行は[Y]をキャンセルは[N]を入力しEnterキーを押下します。 >Y
------------------------画面例2------------------------
これを実行することで、優先順位が変更になります。再度「[1] 登録済み無線APの優先順位を確認」を選択して、SSID一覧を確認してみましょう。
------------------------画面例3------------------------
ユーザー プロファイル
---------------------
    すべてのユーザー プロファイル     : AccessPoint-B
    すべてのユーザー プロファイル     : AccessPoint-A
    すべてのユーザー プロファイル     : AccessPoint-C
------------------------画面例3------------------------
AccessPoint-Bの優先順位を「1」に指定したので、AccessPoint-Bが最優先(一番上)になっています。

登録してあるSSIDを削除する場合にはメニュー「[3] 登録済みの無線LANプロファイル削除」を選択します。
たとえばAccessPoint-Cを削除してみます。
「削除するプロファイル名を入力します >」と表示されますので、AccessPoint-Cと入力してEnterを押下します。
「確認のためもう一度入力してください >」と表示されますのでもう一度「AccessPoint-C」を入力してEnterを押下します。(削除なので念のため2回入力するようにしています。
------------------------画面例4------------------------
----------------メニュー----------------
[1] 登録済み無線APの優先順位を確認
[2] 無線APの優先順位の変更
[3] 登録済みの無線LANプロファイル削除
[4] この処理を終了する
-----------------------------------------
実行する処理が記載された番号を入力してください >3
削除するプロファイル名を入力します >AccessPoint-C
確認のためもう一度入力してください >AccessPoint-C
このホスト(PC1)から無線LANプロファイル名AccessPoint-Cを削除します。
よろしいですか? ※キャンセル時にはメインメニューに戻ります。
削除実行は[Y]をキャンセルは[N]を入力しEnterキーを押下します。 >Y
------------------------画面例4------------------------
これを実行することでSSIDを削除できます。
再度「[1] 登録済み無線APの優先順位を確認」を選択して、SSID一覧を確認してみましょう。
------------------------画面例5------------------------
ユーザー プロファイル
---------------------
    すべてのユーザー プロファイル     : AccessPoint-B
    すべてのユーザー プロファイル     : AccessPoint-A
------------------------画面例5------------------------
AccessPoint-Cを削除したのでAccessPoint-BとAccessPoint-Aのみになっています。

終了するときには必ずメニュー「[4] この処理を終了する」を選択するようにしてください。バッチファイルで使用した変数のを初期化する処理が最後に動作しますので。
メニュー「[4] この処理を終了する」から終了しなかった場合にはこの変数初期化が動作しないままでバッチファイルが終了してしまいます。別のバッチファイルを実行した時に偶然変数名が被ってしまうと意図せず初期値が入っていることになりますのでご注意を。

netshコマンドでSSIDを操作するのが面倒に感じている方向けにお役に立てば幸いです。

文末:それではバッチファイルです。※「@echo off」が先頭行です。

::*****************************************************************
:: バッチファイル
::*****************************************************************
@echo off
:startssidmgr
set NUM=
set SSID=
set RSID=
set IFNAME=
set PRIORITY=
set Rtry=
CLS
echo ----------------メニュー----------------
echo [1] 登録済み無線APの優先順位を確認
echo [2] 無線APの優先順位の変更
echo [3] 登録済みの無線LANプロファイル削除
echo [4] この処理を終了する
echo -----------------------------------------
set /p NUM="実行する処理が記載された番号を入力してください >"
if "%NUM%"=="1" goto showaplist
if "%NUM%"=="2" goto apmod
if "%NUM%"=="3" goto apDel
if "%NUM%"=="4" goto endMsg
goto NoNumber

:showaplist
netsh wlan show profiles
echo .
echo 必要な情報はメモ帳などに転記してください。
echo .
pause
goto startssidmgr

:apmod
set /p SSID="優先順位を変更するプロファイル名を入力します。 >"
set /p PRIORITY="このプロファイルの優先順位を数字で入れてください。 >"
:ExecSSIDmod
echo このホスト(%COMPUTERNAME%)で利用する無線LANプロファイル%SSID%の
echo 優先順位を%PRIORITY%に変更します。よろしいですか?
echo ※キャンセル時にはメインメニューに戻ります。
set /p Rtry="変更の実行は[Y]をキャンセルは[N]を入力しEnterキーを押下します。 >"
if /i %Rtry% == y (goto startSSIDmod)
if /i %Rtry% == n (goto startssidmgr)
echo 正しく入力してください。
goto ExecSSIDmod
:startSSIDmod
netsh wlan set profileorder name="%SSID%" interface="Wi-Fi" priority=%PRIORITY%
echo --------------------------------------------------
echo %SSID%のプロファイル順位が%PRIORITY%になりました。
echo --------------------------------------------------
goto end

:apDel
echo プロファイル名は「メニュー[1] 登録済み無線APの優先順位を確認」
echo から確認してください。
echo ...
set /p SSID="削除するプロファイル名を入力します >"
set /p RSID="確認のためもう一度入力してください >"
IF  %SSID%==%RSID% goto ExecDel
echo 入力に誤りがあります。入力を確認してください。
echo 再度入力画面に戻ります。
echo .
goto apDel
:ExecDel
echo このホスト(%COMPUTERNAME%)から無線LANプロファイル名"%SSID%"を削除します。
echo よろしいですか? ※キャンセル時にはメインメニューに戻ります。
set /p Rtry="削除実行は[Y]をキャンセルは[N]を入力しEnterキーを押下します。 >"
if /i %Rtry% == y (goto startapDel)
if /i %Rtry% == n (goto startssidmgr)
echo 正しく入力してください。
goto ExecDel
:startapDel
netsh wlan delete profile name="%SSID%"
echo ------------------------------------
echo %SSID%のプロファイル削除処理が完了しました。
echo ------------------------------------
goto end

:NoNumber
echo ちゃんと指定された番号を入力してください。
goto startssidmgr
:interruption
echo 処理を中断しました。
:end
rem もう一度処理をするかどうか確認し、処理しない場合終了します。
echo --------------------------------------------------------------
echo 別のSSIDについて確認/編集/削除を実行するには[Y]を
set /p Rtry="処理を終了するには[N]を入力しEnterキーを押下します。 >"
if /i %Rtry% == y (goto startssidmgr)
if /i %Rtry% == n (goto endMsg)
goto endMsg
:endMsg
set NUM=
set SSID=
set RSID=
set IFNAME=
set PRIORITY=
set Rtry=
echo %0 の動作が完了しました。
::*****************************************************************