treedown’s Report

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

バッチファイルでSSID一括追加(要事前準備)

コマンドラインSSIDを追加する方法を知らなかったのでご報告します。

この方法を使うと、コマンドライン複数SSIDを一気に追加することが可能ですので、小規模企業のシステム管理者の手間が軽減される可能性があります。

発端はWindows7まではSSID追加のためにUSBにSSID設定を書出し、SMRTNTKYフォルダ内のSSID設定をsetupSNK.exeで読み込む、というOS標準の機能を使っていたのですが、Windows8以降(8.1)ではこれが使えないらしく、
図1:エラー画面

f:id:treedown:20151010235252p:plain
---------------------------
ウィンドウタイトル:RunDLL
---------------------------
wzcdlg.dll を開始中にエラーが発生しました。

指定されたモジュールが見つかりません。
---------------------------
とエラーが出るのです。
??
最初はなぜか分からなかったのですが、どうやらWindows7で使えていたSSIDをsetupSNK.exeで読み込むという方法がWindows8以降では使えなくなっているようです。

と、なると、以前にSSIDの優先順位をnetshコマンドで設定したように、SSIDの追加もnetsh wlanコマンドで実行するんだろうなぁ…と思って調べてみました。
どうやら追加するコマンドは
netsh wlan add profile [filename=]<文字列> [[interface=]<文字列>] [[user=]all|current]
で実行するようです。
ちなみにWindows7でも確認してみたら、上記のコマンドラインが用意されていたので、Windows7でもわざわざSSIDの追加にUSBメモリを使わなくてもよかったのね、と改めて知りました。

となると、このコマンドを実行してやればSSIDを追加することが可能で、このコマンドを複数回実行するバッチファイルを用意してやれば1台のPCに対してSSIDを一気に追加することも可能です。
さらに、SSIDの追加はユーザ権限で実行できますので、グループポリシーやログオンスクリプトで実行する場合であっても(runasやサードパーティー製ツールなどで)権限代行の心配をする必要はありません。
順番としては、

  1. 設定用PCで接続したい無線LANの設定を一通り実行する。
  2. 接続確認して無線LANに接続できることを確認し、設定をエクスポートする。
  3. エクスポートした設定をコマンドラインにする。

もうちょっと詳しく書くと、

  1. 設定用PCにSSIDを設定するか無線LAN使用中のPCを用意する。
  2. 無線LANに接続可能なPCから「netsh wlan export profile %設定したSSID名%」で展開したいSSID設定を抜き取る。
  3. 展開PCで「netsh wlan add profile filename="%.xmlファイルフルパス指定%" user=all」を実行してSSIDを登録する。

これで他のPCに展開準備が完了します。

さてまずは事前準備として無線LAN設定のためのデータを用意しましょう。
設定用PCで無線LAN設定を実行します。
ここは通常利用するようにフツーに無線LAN設定を実行します。もしくは既存のPCで既に無線LANで接続しているようであればそのPCを用意してもOKです。
もし設定用PCに無線LAN設定を実施した場合にはAPへの接続確認も実行しておきます。このPCの接続がベースになりますので接続できない設定をベースにした場合、どのPCでも接続できません。
無線LANに接続できるPCから以下のコマンドで設定をエクスポートします。

netsh wlan export profile %設定したSSID名%

実行例-> netsh wlan export profile HomeSSID
これを実行すると
----------------------------------------------
インターフェイス プロファイル "HomeSSID" がファイル ".\Wi-Fi-HomeSSID.xml" に保存されました。
----------------------------------------------
と表示されてカレントディレクトリに.xmlファイルが保存されます。
図2:設定のエクスポート

f:id:treedown:20151010235627p:plain

この調子で設定したいSSIDは次々.XMLファイル化してしまいましょう。

図3:生成されたXMLファイル

f:id:treedown:20151010235643p:plain

このXMLファイルをnetsh wlanコマンドで追加してやればSSIDが追加されてすぐにアクセスポイントに接続できるようになります。
接続のためのバッチファイルはすごく単純で、追加コマンドの

netsh wlan add profile filename="%.xmlファイルフルパス指定%" user=all

を追加したいSSID分羅列して、バッチファイルとして一挙に実行してしまえば完了です。

例えば先ほどエクスポートした「Wi-Fi-HomeSSID.xml」と「Wi-Fi-NI-760S_8465.xml」の2つのXMLファイルを一挙に追加するバッチファイルだと以下のようになります。
ただ、ファイル指定はフルパス指定が必要なので、共有フォルダ\\FILSVR\Shareに保管している前提で記載します。(フルパス指定しなかった場合にはコマンドを実行した時のカレントディレクトリが参照されます。)
----------------------------------------------------------------------
ファイル名:addSSID.bat
----------------------------------------------------------------------
@echo off
netsh wlan add profile filename="\\FILSVR\Share\Wi-Fi-HomeSSID.xml" user=all
netsh wlan add profile filename="\\FILSVR\Share\Wi-Fi-NI-760S_8465.xml" user=all
----------------------------------------------------------------------
SSIDがある分だけ、バッチファイルのnetsh wlan行を追加していきます。
このバッチファイルを実行するとこんな感じです。
図4:バッチファイル実行したところ

f:id:treedown:20151011000031p:plain

追記します。

以前はここまでの記載でしたが、どうせならPSK=プレシェアードキー(Pre-Shared Key)も追加したいですよね?
この場合、先ほどのバッチファイルにPSK追加コマンドを追記します。
例えば「HomeSSID」のPSKが「12345678abc」、「NI-760S_8465」のPSKが「abcd123」の場合、なおかつ「NI-760S_8465」はステルスSSID(ANY拒否)の場合には以下のように追記したバッチファイルを作成します。
----------------------------------------------------------------------
ファイル名:addSSID.bat
----------------------------------------------------------------------
@echo off
netsh wlan add profile filename="\\FILSVR\Share\Wi-Fi-HomeSSID.xml" user=all
netsh wlan set profileparameter name=HomeSSID keymaterial=12345678abc
netsh wlan add profile filename="\\FILSVR\Share\Wi-Fi-NI-760S_8465.xml" user=all
netsh wlan set profileparameter name=NI-760S_8465 nonBroadcast=yes keymaterial=abcd123
----------------------------------------------------------------------
「netsh wlan set」行でキーを設定します。「keymaterial=」がキーです。なお「name=」で指定するのはワイヤレスLANプロファイル名であってSSIDではありませんのでご注意を。(私は同じ名称に設定をそろえていますが)
ステルスSSID(ANY拒否のアクセスポイント)に設定してある場合には、「nonBroadcast=yes 」というオプションを入れます。これで「このネットワークがブロードキャストしてない場合でも接続する」というオプションにチェックが入った状態でワイヤレスLANプロファイルが設定されます。

話を戻します。

SSIDが追加されたかどうか、以前にご紹介したバッチファイルで確認してみましょう。
(※Windows8以降でもAP(SSID)の優先順位を設定したい - treedown’s Reportで作成したSSID優先順位操作バッチファイルで一覧表示してみましょう。)
図5:SSID一覧確認

f:id:treedown:20151011000248p:plain
無事追加されたようです。

あとは、この「addSSID.bat」をそのまま配ってもいいですし、addSSID.batをどこか共有フォルダに配置してショートカットだけ配布してもOKです。
ユーザがこのaddSSID.batを実行すると、SSIDが追加されるようになります。
グループポリシーやサードパーティー製の資源配布ソフトでバッチファイルを実行するようにしたら、ログインなどのトリガでSSIDが追加されます。

社内LANのSSIDをすべて.xmlファイル化しておけば、このバッチファイルを実行するだけで一気にSSIDをすべて追加することができるようになりますので、キッティング作業の際にはバッチファイル一回でSSIDの設定追加が完了することになります。
しかも、接続設定で手動で入力するところを自動化しますのでタイプミスなどもなく一瞬でSSID追加が完了するところがメリットです。

キッティング作業などで同一の設定を何台・何十台と実施しなければならない場合には、SSID設定もこのバッチファイルで一括入力する方法で実施されてはいかがでしょうか。