WindowsのWi-Fi操作をコマンドプロンプトから行う

Wi-Fiのアクセスポイントを頻繁に切り替えるような現場にいるなら覚えておきたい **netsh wlan** コマンドをまとめてみた。
バッチファイルやPowerShellスクリプトに組み入れると便利に使えると思う。バッチファイルの書き方は、別記事【[Windowsのネットワーク切り替えバッチを作ってみた](https://qiita.com/mindwood/items/9c36ff0eb7f126ff6db2)】を参考にして欲しい。

カフェや新幹線の車内など、公衆Wi-Fiに特化した話は【[ノマドワーカーのための公衆無線LANアクセスポイントまとめ](https://qiita.com/mindwood/items/1427bd20d22f583ed9d5)】で掘り下げている。

<font color="red">【注意】netshコマンドは将来的には廃止され、PowerShellに一本化される予定であることを付け加えておく。</font>

# netsh wlan コマンド一覧
以下、`SSID`とあるのは正確にはプロファイル名であるが、プロファイル名は標準で`SSID`が採用されるため、分かり易さ優先でそのように記載している。

## 現在接続している無線LANの状況を確認
```:入力コマンド
netsh wlan show interface
```

```:出力例
名前                   : Wi-Fi
説明                   : Killer Wireless-n/a/ac 1535 Wireless Network Adapter
GUID                   : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
物理アドレス           : XX:XX:XX:XX:XX:XX
状態                   : 接続されました
SSID                   : aaaaaaaa
BSSID                  : XX:XX:XX:XX:XX:XX
ネットワークの種類     : インフラストラクチャ
無線の種類             : 802.11n
認証                   : WPA2-パーソナル
暗号                   : CCMP
接続モード             : 自動接続
チャネル               : 5
受信速度 (Mbps)        : 300
送信速度 (Mbps)        : 300
シグナル               : 88%
プロファイル           : ap-15F-WEST

ホストされたネットワークの状態: 利用不可
```

## 既知のネットワーク一覧を表示
```:入力コマンド
netsh wlan show profiles
```

```:出力例
すべてのユーザー プロファイル     : ap-15F-WEST
すべてのユーザー プロファイル     : ap-16F-EAST
すべてのユーザー プロファイル     : ap-15F-EAST
```

## 既知のネットワーク詳細をパスワード含めて表示する
```:入力コマンド
netsh wlan show profiles name="SSID" key=clear
```

```:出力例
接続の設定
---------------------
    SSID の数          : 1
    SSID 名             : "ap-15F-WEST"
    ネットワークの種類    : インフラストラクチャ
    無線の種類          : [ 任意の無線の種類 ]
    ベンダー拡張          : 存在しません

セキュリティの設定
-----------------
    認証                : WPA2-パーソナル
    暗号                : CCMP
    認証                : WPA2-パーソナル
    暗号                : GCMP
    セキュリティ キー      : あり
    主要なコンテンツ       : password
```

## 既知のネットワークを削除
前項の通り、管理者権限があればパスワード（暗号化キー）を表示できてしまうので、不要なプロファイルがあれば削除しておいた方が安全だろう。

```
netsh wlan delete profile name="SSID"
```

## 接続する

```
netsh wlan connect name="SSID"
```

## 切断する

```
netsh wlan disconnect
```

## 接続順序を変更する
複数のアクセスポイントが受信範囲にあるとき、優先的に接続したいアクセスポイントを指定する。

```
netsh wlan set profileorder name="SSID" priority=1
```

## プロファイルをXMLファイルにエクスポートする
現在接続しているプロファイルを、現在のフォルダに出力。

```
netsh wlan export profile
```

SSIDとフォルダを指定して出力。

```
netsh wlan export profile name="SSID" folder="C:\tmp"
```

## XMLファイルからインポートする
大量の端末に一括で同じ設定をする場合に有用である。

```
netsh wlan add profile filename="ファイル名"
```

パスワードなどの追加は次のようにする。

```
netsh wlan set profileparameter name="SSID" nonBroadcast='ステルス可否' keymaterial='パスワード' connectionmode='接続の自動/手動'
```

## レポートをHTML形式で生成する

```
netsh wlan show wlanreport
```

```
レポートを作成中...
WLAN イベントを照会しています...
NCSI イベントを照会しています...
NDIS イベントを照会しています...
EAP イベントを照会しています...
WCM イベントを照会しています...
カーネル イベントを照会しています...
システム イベントを照会しています...
ipconfig を実行しています...
netsh wlan show all を実行しています...
ワイヤレス プロファイルを照会しています...
システムとユーザー証明書を照会しています...
ユーザー情報を照会しています...
ネットワーク デバイスを照会しています...

レポートが C:\ProgramData\Microsoft\Windows\WlanReport\wlan-report-latest.html に書き込まれました
完了。
```

### レポート例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/3617557b-57d8-83c3-58ff-2e4ef03c1b95.png)

# その他
ここで紹介したのは一部。他にも使えるコマンドはあるので `netsh wlan show` で確認して欲しい。