Wi-FiのSSIDのエクスポート・インポートをコマンドで行うには(Windows)

※この記事は下記ブログで掲載したものをブラッシュアップしたものとなります。
※下記ブログの元記事の内容は削除し、ここのリンクへの案内のみに変更しました。

https://www.kokosan60.com/blog/?p=18

# Wi-FiのSSIDのエクスポート・インポート

WindowsでWi-Fiの設定(SSID)をエクスポートするには「netsh」コマンドを用いる方法がありますが、
ネットを検索すると間違った情報を載せているサイトが散見されるため、
よく書かれているコマンドとして、
正しい情報を記載していきます。

# Wi-FiのSSIDのエクスポート・インポートとは？
そもそも、このエクスポート、インポートとは何なのかを説明します。
WindowsではSSIDの情報を記憶しておくことができます。
※Win10の場合は設定→ネットワークとインターネット→Wi-Fi→既知のネットワークの管理で確認できます。
このSSIDの情報をエクスポートすることで、SSIDの情報のバックアップが行えます。
インポートを使えば、間違えてSSIDの情報を消してしまった場合でも容易に復元できたり、
他のPCへの設定の複製などもできます。

# エクスポートについて

下記コマンドはWi-Fiをエクスポートするのによく記載されているコマンドです。

```bat:export.bat
netsh wlan export profile name="SSID名" folder="xml出力先フォルダー"
```

このコマンドで出力したxmlファイルの中身は以下のようになります。

```xml:export.xml
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>test</name>
    <SSIDConfig>
        <SSID>
            <hex>74657374</hex>
            <name>test</name>
        </SSID>
        <nonBroadcast>true</nonBroadcast>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>true</protected>
                <keyMaterial>01000000D08C9DDF0115D1118C7A00C04FC297EB010000002E83C9B6F6CD104C877310FCBCDBBAB000000000020000000000106600000001000020000000A674BA7CDB350038A108AA4F269616616C8B454FC6F5A07EB86ECAF856FCD8A8000000000E8000000002000020000000A351651A30B0695F01BD4C4C895191DEB1A821A25C35DA068D7C85D64825FF1E10000000BCB66A328746C189B3848EC940A104DE4000000004DDC943852FE6EA4C907A6B838A72C321A6176339B90013BE89C6A0AB71E677969B77BAAFB3EBFFCAD894DE8628AD3FD19CCC1E6AB2BC5DF62633EA57CDAF81</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>
```

後ろから5行目の\<keyMaterial\>を見ると、
暗号化された文字列が記載されています。

このxmlをインポートするとどうなるでしょうか。

このxmlを出力したPCでインポートする場合は問題ないのですが、
別のPCでインポートした場合、
**パスワードの部分だけが反映されない**のです。

:::note warn
同じPCでもOS再インストールした場合でも反映されないかと思います。
※実証していないので推測になります。
:::

このコマンドを使う際は大抵は他のPCへ設定を複製したいからだと思いますが、
これでは使い物にはなりません、

※下記がインポートのコマンドです。

```bat:import.bat
netsh wlan add profile filename="xmlファイル"
```
# ではどうすればいいのか？
方法は2通りあります。
**1.インポート後にパスワードを別途コマンドで設定する**
**2.xmlにエクスポートする際に平文(暗号化しない状態)で出力する**

それぞれ見ていきます。
## 1.インポート後にパスワードを別途コマンドで設定する
下記コマンドにてパスワードを設定することができます。

```bat:set_ssid_password.bat
netsh wlan set profileparameter name="SSID名" keymaterial=パスワード
```

ですので、インポートコマンドの後に実行すればパスワードも一緒に設定がされます。

## 2.xmlにエクスポートする際に平文(暗号化しない状態)で出力する
平文のxmlを出力するには末尾に **「key=clear」** を追加するだけになります。

```bat:export.bat
netsh wlan export profile name="SSID名" folder="xml出力先フォルダー" key=clear
```
このコマンドで出力したxmlファイルは以下のようになります。

```xml
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>test</name>
    <SSIDConfig>
        <SSID>
            <hex>74657374</hex>
            <name>test</name>
        </SSID>
        <nonBroadcast>true</nonBroadcast>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>testtest</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>
```

お分かりいただけたでしょうか。
\<keyMaterial\>の部分が平文の状態で書かれているかと思います。
このxmlでインポートすればパスワードも一緒に設定されます。

### 最初のxmlとの違い
暗号化と平文のxmlの違いは2行だけで、
**\<protected\>** と **\<keyMaterial\>**
になります。
**\<protected\>**  がtrueの場合は暗号化、falseの場合は平文
を意味します。
ですので、
暗号化されたxmlであっても、この2行を平文用に書き換えてしまえば
※trueをfalseに、パスワードを暗号化されたものから平文のものに書き換える
使えるようになります。

# 追記(2022/4/28)
エクスポートする際の **xml出力先フォルダー** ですが、末尾に\\(円マーク)はつけないでください。
**key=clear**が判定されず、**Protected**が**true**になってしまうことが判明しました。

```bat
rem OK
folder="c:"
folder="c:\temp"
rem NG
folder="c:\"
folder="c:\temp\"
```


# おわりに
ネットを見ると、他のPCへインポートした時のことについて触れていないものが結構見られました。
前述の通り、このコマンドは基本的に他のPCへ設定を複製するために使うことが多いと思われますので、
ここを記述しないと意味がないものになってしまうと思います。
ただし、パスワードが平文で記載されたままとなっていますので、
セキュリティ上問題があるとかの場合はパスワードのみ手動で設定とかを行った方がいいかと思われます。