公用PC環境でXMLファイルを保存できない場合のWi-Fi自動接続方法
はじめに
公用のコンピュータでは、メンテナンス作業の一環として初期化スクリプトが実行されることが一般的です。このスクリプトは、ユーザーが作成したファイルやインストールされたプログラム、ネットワーク設定などを削除し、コンピュータを初期状態に戻す役割を果たします。これにより、公用性を維持し、多数のユーザーが同じ環境で使用できるようにします。しかし、メンテナンス中に複数回の再起動が必要な場合、Wi-Fiの接続設定も削除されてしまうことがあり、接続のたびに手動で再設定する手間が発生します。このような状況下で、コンピュータの公用性を維持しながら、Wi-Fi接続を安定して利用できる方法を検討しました。
Wi-Fi自動接続の一般的な方法
Wi-Fi接続の手間を省き、自動化するために以下の2つの方法を検討しました。
- XML構成ファイルを使用して接続情報を保存すること。
- XMLファイルが削除される環境でAHKスクリプトを利用して自動化する方法です。
XML構成ファイルを利用
XML構成ファイルは、Windowsが提供するネットワーク管理機能を利用し、Wi-Fiの接続情報をXML形式で保存・管理する方法です。この手法では、Wi-Fi接続設定をエクスポートし、必要に応じて編集し、再インポートすることで、手動操作を最小限に抑えたWi-Fi管理が可能になります。
XML構成ファイルの役割
Wi-Fi構成ファイル(XML)は、Windowsの netsh wlan
コマンドを使用してエクスポートでき、以下の情報を保存します:
- SSID(ネットワーク名)
- セキュリティ設定(WPA2, AES など)
- 認証方式(802.1X, EAP など)
- 自動接続設定
- MACアドレスのランダム化設定
これにより、Wi-Fiプロファイルを事前に設定し、ユーザーが手動で設定を入力することなく接続できるようになります。
Wi-Fi接続におけるXML構成ファイルの役割
Wi-Fiの設定をXMLファイルとして保存することで、以下のメリットがあります:
-
一貫したWi-Fi設定の展開
- 企業や学校などの環境では、すべてのPCで統一したWi-Fi設定を適用する必要がある。
-
netsh wlan add profile
を使用することで、同じWi-Fi設定を複数のPCに適用可能。
-
セキュリティと管理の簡素化
- 事前に設定を管理できるため、個別にWi-Fiを設定する手間を削減できる。
- Wi-Fi設定の変更が容易で、プロファイルを変更し再インポートするだけで適用可能。
-
ユーザー認証の管理
- XMLには Wi-Fi接続のアカウント情報を含めることが可能 だが、エクスポート時に
key=clear
オプションを使用しない場合、認証情報は含まれず、ユーザーが接続時に手動で入力する必要がある。 - エンタープライズWi-Fi環境(802.1X)では、個々のユーザー認証が必要になるため、認証情報を含めないのが一般的。
- XMLには Wi-Fi接続のアカウント情報を含めることが可能 だが、エクスポート時に
XMLファイルの構造とWi-Fi設定情報の保存内容
Windowsでは、Wi-Fi設定をXMLファイルとしてエクスポートし、再インポートすることで、Wi-Fi接続を自動化できます。このXMLファイルには、Wi-Fiプロファイルの詳細情報が記述されており、それぞれの項目が特定の設定を管理しています。
XMLファイルの主な構造
Wi-Fi設定をエクスポートすると、以下のようなXMLファイルが生成されます。
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>OMUNET-1X</name>
<SSIDConfig>
<SSID>
<name>OMUNET-1X</name>
</SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM>
<security>
<authEncryption>
<authentication>WPA2</authentication>
<encryption>AES</encryption>
<useOneX>true</useOneX>
</authEncryption>
<OneX xmlns="http://www.microsoft.com/networking/OneX/v1">
<authMode>user</authMode>
<EAPConfig>
<EapHostConfig xmlns="http://www.microsoft.com/provisioning/EapHostConfig">
<EapMethod>
<Type xmlns="http://www.microsoft.com/provisioning/EapCommon">25</Type>
</EapMethod>
</EapHostConfig>
</EAPConfig>
</OneX>
</security>
</MSM>
</WLANProfile>
各セクションの役割
<name>
:Wi-Fiプロファイル名
1. このタグにはWi-Fiプロファイルの名前が保存されており、Windowsのネットワーク管理で識別される名称になります。
<name>OMUNET-1X</name>
この名前を変更することで、新しいWi-Fiプロファイルとして登録可能です。
<SSIDConfig>
:Wi-Fiネットワーク名(SSID)
2. このセクションでは、Wi-FiのSSID(ネットワーク名)を指定します。
<SSIDConfig>
<SSID>
<name>OMUNET-1X</name>
</SSID>
</SSIDConfig>
<name>
の値を変更すると、異なるWi-Fiネットワークとして認識されます。
<connectionType>
:接続タイプ
3. このタグは、ネットワーク接続の種類を指定します。
<connectionType>ESS</connectionType>
ESS
(Extended Service Set) は通常のWi-Fiネットワークを示し、IBSS
はアドホック接続(端末間直接通信)を意味します。
<connectionMode>
:自動接続の設定
4. Wi-Fiに自動で接続するかどうかを指定します。
<connectionMode>auto</connectionMode>
-
auto
:Windows起動時に自動的に接続。 -
manual
:手動で接続。
<MSM>
:セキュリティ設定
5. Wi-Fiの認証方法や暗号化方式を指定する最も重要な部分です。
<MSM>
<security>
<authEncryption>
<authentication>WPA2</authentication>
<encryption>AES</encryption>
<useOneX>true</useOneX>
</authEncryption>
-
<authentication>
:WPA2
やWPA3
などのセキュリティ方式を指定。 -
<encryption>
:AES
などの暗号化方式を指定。 -
<useOneX>
:true
にすると 802.1X 認証を有効化。
<OneX>
:802.1X 認証の設定
6. 企業や大学などで使用される EAP(Extensible Authentication Protocol) を利用するWi-Fiの認証方式を指定します。
<OneX xmlns="http://www.microsoft.com/networking/OneX/v1">
<authMode>user</authMode>
<EAPConfig>
<EapHostConfig xmlns="http://www.microsoft.com/provisioning/EapHostConfig">
<EapMethod>
<Type xmlns="http://www.microsoft.com/provisioning/EapCommon">25</Type>
</EapMethod>
</EapHostConfig>
</EAPConfig>
</OneX>
-
<authMode>
:user
(ユーザー認証)またはmachine
(デバイス認証)を指定。 -
<EapMethod>
: EAPの種類を指定(25
は PEAPを示す)。
まとめ
このXMLファイルを使用することで、Wi-Fi設定を エクスポート・インポート し、一貫したWi-Fi接続環境を構築できます。
セクション | 設定内容 |
---|---|
<name> |
Wi-Fiプロファイルの名前 |
<SSIDConfig> |
ネットワークSSID |
<connectionType> |
ESS (通常Wi-Fi) or IBSS (アドホック) |
<connectionMode> |
auto (自動接続) or manual (手動) |
<authEncryption> |
認証と暗号化方式(例:WPA2-AES) |
<OneX> |
802.1X認証の設定(EAP/PEAP) |
Wi-Fi構成ファイルを適切に管理することで、手動操作を減らし、効率的なWi-Fi接続環境を実現できます。
AHKスクリプトを利用
AHK(AutoHotkey)スクリプトは、キーボードやマウス操作を自動化するツールです。Wi-Fi接続の際に必要なクリック操作やキーストロークを自動で実行し、手動入力の手間を省くために使用されます。特に、PCのシステム設定を変更することなく、あたかも人が操作しているかのようにWi-Fiに接続できるのが最大の利点です。
AHKスクリプトの特徴と利点
-
PCのシステム設定を変更せずに動作可能
- XMLファイルを編集・インポートする方法とは異なり、システムのネットワーク設定には直接変更を加えません。
- 環境ごとに設定変更を行う必要がなく、管理者の権限なしで実行可能。
-
自動化による接続プロセスの簡略化
- Wi-Fiのアイコンをクリックし、パスワードを入力する作業をスクリプトが自動で行うため、作業の手間を削減。
-
Wi-Fi接続後の作業を自動化し、業務開始をスムーズに
- Wi-Fi接続完了後、必要なソフトウェアを起動する、特定のネットワークドライブをマウントするなどの「事前準備」をスクリプト内で自動実行可能。
- これにより、PCが起動するとすぐに最適な作業環境に移行できる。
実現方法
以下は、AHKを使用して Wi-Fi接続+作業前の準備操作 を自動化するスクリプトの例です。
AHKスクリプト例
; Wi-Fiアイコンをクリックし、パスワードを入力するスクリプト
CoordMode, Mouse, Screen ; マウス操作の基準座標をスクリーン全体に設定
; Wi-Fiアイコンをクリック
Click, 100, 200 ; アイコンの座標(仮)
Sleep, 1000 ; クリック後に1秒待機
; Wi-Fiの接続画面が開かれたか確認(画像認識などを組み込むことも可能)
; パスワード入力フィールドに移動
Send, {Tab} ; タブキーで入力フィールドへ移動
Sleep, 500
; パスワードを入力
Send, MyPassword123 ; Wi-Fiパスワード(仮)
Sleep, 500
; Enterキーを押して接続
Send, {Enter}
Sleep, 3000 ; Wi-Fi接続待機
; 接続完了後の事前作業(例: 特定のソフトウェア起動)
Run, notepad.exe ; メモ帳を起動(仮)
Sleep, 500
Run, "C:\Program Files\VPNClient\vpn.exe" ; VPNを起動(仮)
Sleep, 1000
MsgBox, Wi-Fiに接続しました。必要なアプリを起動しました。
AHKスクリプトの追加機能
-
動的なWi-Fiアイコン検出
- PCごとに Wi-Fi アイコンの座標が異なるため、画像認識(ImageSearch)やウィンドウ操作(WinActivate)を活用するとより柔軟なスクリプトが作成可能。
-
事前準備作業の自動化
- Wi-Fi接続後、VPNを自動で接続、クラウドストレージをマウント、メールクライアントを起動するなど、作業前の準備を完全に自動化可能。
注意点
-
セキュリティリスクを考慮する必要がある
- Wi-Fiパスワードをスクリプト内に直接記載すると、流出のリスクがある。
- より安全な方法として、パスワードを暗号化ファイルに保存し、スクリプトから読み取る方式を検討。
-
環境によって動作が変わる可能性
- Wi-Fiアイコンの位置が異なる場合、動的座標検出を追加する必要がある。
- WindowsのアップデートによりGUIが変更された場合、スクリプトの修正が必要になる。
XML方式との比較
項目 | AHKスクリプト方式 | XMLファイル方式 |
---|---|---|
システム設定の変更 | なし(影響なし) | Wi-Fi設定を変更 |
管理者権限 | 不要 | 必要な場合あり |
操作の柔軟性 | 高い | 固定設定 |
適用範囲 | どのPCでも動作 | 特定の設定のみ |
Wi-Fi接続後の自動操作 | 可能 | 不可 |
このように、AHKスクリプトは PCの設定を変更せず、システム環境に影響を与えない という特性を持ちつつ、柔軟に Wi-Fi 接続+作業準備を自動化できる点が強みです。
結論
AHKスクリプトを利用することで、PCのネットワーク設定を変更せずにWi-Fi接続を自動化し、作業前の準備を同時に進めることが可能 になります。
特に、環境ごとに設定変更が難しい場合や、VPN・クラウド同期などの追加作業が必要なシナリオでは、AHKの方がXML方式よりも柔軟な対応が可能 です。🚀
ただし、PC起動時の右下のWi-Fiアイコンの位置は固定ではなく、使用するプリインストールソフトや表示設定によって変化するため、正確な位置を特定するのは困難です。
また、同じPCであっても、常に同じ位置にWi-Fiアイコンが表示されるとは限らないため、画像認識なしでは安定したクリック操作が保証できません。
そのため、コマンドプロンプト(cmd)を利用して特定のWi-Fiに直接接続する方法も考えられますが、総合的に見るとXMLファイルを利用するほうが管理の手間が少なく、安定した接続を確保しやすい方法です。
とはいえ、もし大量の操作を自動化し、Wi-Fi接続と同時に他のアプリや環境設定を行う必要がある場合、AHKスクリプトは非常に有効な選択肢となります。
問題背景と解決過程
問題背景
再起動時にWi-Fi設定が初期化される特定の環境では、OSが提供する初期化スクリプトによってWi-Fiプロファイルが削除される問題が発生していました。このような環境で企業ネットワークに安定して接続する方法を検討しました。
メンテナンスごとに各コンピュータに約3つのネットワーク接続が必要になるため、毎回手動でパスワードを入力する作業が煩雑でした。そこで、この問題を解決するために以下の方法を試しました:
-
XML構成ファイルを利用: Wi-Fi設定をXMLファイルとして保存し、
netsh wlan add profile
コマンドで適用。 - AHKスクリプトを使用: キーボード操作やマウスクリックを模倣してパスワードを入力。ただし、メンテナンス対象のPCによってWi-Fiアイコンの位置が異なるため、単純なXY座標指定ではWi-Fiアイコンを正確にクリックできません。また、画像認識を組み込むとコードの複雑さが大幅に増加し、保守性が低下するため、この方法は実用的ではありませんでした。
解決過程
原因の特定
問題の原因は、C:\edu_logout\wlan_disconnect.bat
が再起動時に Wi-Fi プロファイルを削除していたことです。このスクリプトがどこで呼び出されているかは不明でしたが、一時的にコメントアウトすることで設定削除を防ぎました。
学校用の初期化スクリプトの削除方式
学校の初期化スクリプトは、特定のネットワーク名(SSID)を持つ Wi-Fi プロファイルのみを削除する設計となっていました。例えば、wlan_disconnect.bat
内部では以下のようなコードが使用されている可能性があります:
netsh wlan delete profile name="OMUNET-1X"
netsh wlan delete profile name="SCHOOL-WIFI"
この方法では、特定の Wi-Fi プロファイルのみが削除され、その他の Wi-Fi 設定(例えば OMUNET-1X-Backup
)には影響を与えません。
なお、ここでは C:\edu_logout\wlan_disconnect.bat
という 仮のスクリプト名 を例として使用していますが、実際にはこの処理は システムバックグラウンドで常時動作している瞬快(Shunkai)などのリカバリソフトウェア によって行われる可能性があります。このソフトウェアは、システムをリセットする際に、事前に指定された Wi-Fi プロファイルを削除する動作を含んでいる場合があります。
より簡単な方法:全体削除
より簡単で確実な方法として、学校側が Wi-Fi 設定を 全削除 するスクリプトを実装することも可能です。例えば、以下のようなコードを用いることで、すべての Wi-Fi プロファイルが削除されてしまいます:
netsh wlan delete profile name=*
この方法を採用すると、どの Wi-Fi 設定であっても初期化時に削除されてしまうため、単純に Wi-Fi 名を変更するだけでは回避できず、毎回手動で Wi-Fi 設定を再登録する必要が出てしまいます。
幸いにも、グローバル削除は採用されていなかった
幸いなことに、学校の初期化スクリプトは 全削除(netsh wlan delete profile name=*
)を行っておらず、特定の Wi-Fi プロファイル名のみを削除する方式を採用していました。このため、我々が採用した Wi-Fi プロファイルの複製(クローン) を作成し、元のWi-Fi設定と異なる名前を付ける という方法で削除を回避できました。
このアプローチにより、Wi-Fi 設定を維持するための手順が大幅に簡略化され、以下の方法で簡単に解決できるようになりました:
- Wi-Fi プロファイルをエクスポート
- Wi-Fi 名を変更し、新しいプロファイル(OMUNET-1X-Backup)を作成
- 新しい Wi-Fi 設定をインポートし、初回手動接続
- 次回以降、自動接続が可能になる
この方法を採用することで、手作業を最小限に抑えつつ、再起動後の Wi-Fi 接続の維持を実現しました。
最適な対応策
以下の手順で問題を解決しました:
-
現在のWi-Fiプロファイルをエクスポート(未接続状態で)
netsh
コマンドを使用して、まだ認証情報が保存されていない状態で Wi-Fi 設定を XML ファイルとして保存します:netsh wlan disconnect netsh wlan export profile name="OMUNET-1X" folder="C:\WiFiConfig" key=clear
これにより、Wi-Fiプロファイルが
C:\WiFiConfig
に XML 形式で保存されます。 -
プロファイル名の変更
初期化スクリプトによる削除を回避するため、XML構成ファイル内のプロファイル名をOMUNET-1X-Backup
に変更します:<name>OMUNET-1X-Backup</name>
また、SSID名も変更し、Wi-Fi設定の一貫性を保ちます:
<SSIDConfig> <SSID> <name>OMUNET-1X-Backup</name> </SSID> </SSIDConfig>
こうすることで、
wlan_disconnect.bat
による削除対象から外すことができます。 -
編集したプロファイルのインポート
修正した XML ファイルを適用し、新しい Wi-Fi プロファイルを追加します:netsh wlan add profile filename="C:\WiFiConfig\OMUNET-1X-Backup.xml"
-
手動認証の実施
netsh wlan connect name="OMUNET-1X-Backup"
コマンドを使用し、最初の接続時に手動でパスワードを入力します:netsh wlan connect name="OMUNET-1X-Backup"
この方法により、ユーザーはWi-Fi接続時に自分のアカウント情報を入力する必要があります。
-
自動接続の維持
次回以降は、再起動後も新しい Wi-Fi プロファイルOMUNET-1X-Backup
に自動接続されるため、手動入力なしで接続が可能になります。 -
必要に応じた削除操作
メンテナンス作業が完了した後、4_fudai_clean.bat
を使用し、新しい Wi-Fi プロファイルを削除できます:netsh wlan delete profile name="OMUNET-1X-Backup"
なぜこの方法が必要なのか?
-
wlan_disconnect.bat
は 特定の Wi-Fi プロファイル名(OMUNET-1X)を削除 するため、名前を変更することで影響を受けなくなる。 - Wi-Fi 設定を XML ファイルで管理することで、手動設定の手間を省き、再起動後も安定した接続を維持 できる。
- 未接続状態で XML をエクスポートすることで、認証情報が含まれず、ユーザーが接続時に自分のアカウント情報を入力する必要がある。
実行結果
上記の手順により、再起動後も安定してOMUNET-1Xに接続できるようになりました。この改善により、手動操作を最小限に抑えた効率的なWi-Fi管理が可能となりました。また、仮想Wi-Fiプロファイルを利用することで、メンテナンス作業全体の時間を10%削減し、1台あたりのセットアップ時間を10分短縮する成果を上げました。これらの数値は、20台のコンピュータで試験運用した結果から得られたもので、従来の方法に比べて大幅な効率化が確認されています。
Discussion