どうもミツシマです。

今回は無線のSSIDをコマンドにて設定(新規追加)する方法を検証してみました。

検証環境は以下の通り
PC:Windows10 1507


調べて見るとやり方としては、既に設定しているWiFi設定を「netsh wlan export〜」コマンドを使用してXMLファイルにエクスポートし、それをWiFi未設定の端末にコピーして「netsh wlan add〜」コマンドを使用してインポートする。
その後、「netsh wlan set〜」コマンドにてパスワードを再設定してあげたりする方法が出てくるが、意外と面倒。。。
また、汎用性がないように思えるので何とかしてスクリプト1つでやれないかを模索。


完成したスクリプト


#環境変数の設定
$SSIDname = "TEST-SSID"      #SSIDの名前
$nonBroadcast = "true"       #[true] or [false] 非公開のネットワークに接続するかどうかを指定します。
$ConnectionType = "ESS"
$ConnectionMode = "auto"     #[auto] or [manual] ネットワークに自動接続するか手動接続するかを指定します
$authentication = "WPA2PSK"  #[open] or [shared] or [WPA] or [WPA2] or [WPAPSK] or [WPA2PSK]
$encryption = "AES"          #[none] or [WEP] or [TKIP] or [AES]
$useOneX = "false"           #[true] or [false] 802.1X 認証を使用するかどうかを指定します(RADIUS認証を使用しない限り[false])
$keyType = "passPhrase"      #[networkKey] or [passPhrase] 基本[passPhrase]
$keyMaterial = "password"    #SSIDのパスワード


#スクリプトのパス取得
$ScriptFullPath = $MyInvocation.MyCommand.Path
#XMLファイルのパス取得
$XMLPath = $PSScriptRoot + "¥WiFi-SSIDProfile.xml"


$Array=$SSIDname[0..$SSIDname.Length]

#$Arrayの要素を1つずつ16進数のASCIIコードに変更し、文字列結合 
for($i = 0; $i -lt $Array.Count; $i++){
    #Write-Host ('$Array[' + $i + ']:' + $Array[$i])
    $a = [byte][char]$Array[$i]
    $HEX = $a.ToString("X2")
    #Write-Host ('$HEX:' + $HEX)
    $SSIDHEX += [string]$HEX
    #Write-Host ('$SSIDHEX:' + $SSIDHEX)


$XMLContents = @"
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>$SSIDname</name>
    <SSIDConfig>
        <SSID>
            <hex>$SSIDHEX</hex>
            <name>$SSIDname</name>
        </SSID>
        <nonBroadcast>$nonBroadcast</nonBroadcast>
    </SSIDConfig>
    <connectionType>$ConnectionType</connectionType>
    <connectionMode>$ConnectionMode</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>$authentication</authentication>
                <encryption>$encryption</encryption>
                <useOneX>$useOneX</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>$keyType</keyType>
                <protected>false</protected>
                <keyMaterial>$keyMaterial</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
    <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
        <enableRandomization>false</enableRandomization>
    </MacRandomization>
</WLANProfile>


"@

#スクリプトが置かれているフォルダにXMLファイル作成
$xmlDoc = [xml]$XMLContents
$xmlDoc.Save($XMLPath)

#WiFiプロファイルの追加
netsh wlan add profile filename="$XMLPath" user=all

#XMLファイルの削除
Remove-Item -Path $XMLPath -Force

Write-Host "SSID登録完了しました "
pause


〜解説〜

まず全体の流れとしては本来「netsh wlan export〜」でエクスポートしたXMLファイルを「netsh wlan add〜」で追加するのだが、exportせずにコマンドの中でXMLファイルを自動生成してSSID設定を追加するようにしている。
そのため、スクリプトファイルが配置されたカレントフォルダに「WiFi-SSIDProfile.xml」を環境変数の設定に応じて自動生成し、その上で「netsh wlan add〜」を実行。実行後は生成したXMLファイルを削除して設定するという流れである。

その為、環境変数(「$SSIDname」や「$keyMaterial」等)を必要な環境に応じてカスタマイズしてもらえれば、通常のWiFi環境であれば設定可能である。
(注)ここでいう通常のWiFi環境はSSIDとPWで接続出来るような環境であり、証明書やRADIUS認証を使用するような環境では未検証のため、更に検証が必要である。。。(`・ω・´)

今回1番苦労したところは、SSIDの名前をASCIIコードの16進数に変換して記述している箇所がXMLファイルに存在する部分である。(XMLの中だと「<hex>$SSIDHEX</hex>」の部分である。)

一応自分の環境であれば成功したのだが、諸事情によりテスト出来るノートPCのWindowsバージョンがかなり古かった。その為、他のバージョンで上手くいかない場合にはコメントいただけると助かります。
ぜひ改良していきたいと思うので!!!


昨今、当たり前のようにWiFi環境がある為、今回のスクリプトが色んな人の役立つことを祈って今回は終了します。


P.S. ぜひとも使用した人はコメント頂けると助かります!!





スポンサードリンク