KDDI Mobile Saftey ManagerというMDMを使って社内のiPadを管理しています。
VPNやメールの設定等のプロファイルが遠隔から設定できます。
とっても便利。
以前、Profileを使って62台のiPadにVPNの設定を流し込みました。
L2TPからIPSecにVPNの設定を変更することになりました。
ユーザー名とパスワードは同じ。
L2TPで設定されたProfile,62個からユーザー名とパスワードをcsvの一覧にできないだろうか?
csvの一覧からVPNの設定プロファイルを62個一気に作ることはできるだろうか?
#iOSプロファイルからユーザ名とパスワードを抜き出す
PowerShellのXMLパースで取れないかと画策したけど、
多分無理だわ。
<key>EmailAddress</key>
<string>a@a.com</string>
みたいな構文になっているので、
Keyしか取れない(´;ω;`)
そこへ @todashuta 氏から助け舟が、
$xmlstr = @"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UDID</key>
<string></string>
<key>VERSION</key>
<string>7A182</string>
<key>MAC_ADDRESS_EN0</key>
<string>00:00:00:00:00:00</string>
<key>CHALLENGE</key>
<string>String</string>
</dict>
</plist>
"@
$xmlobj = [xml]$xmlstr
$el = $xmlobj.plist.dict.SelectNodes("*")
$table = @{}
for ($i=0; $i -lt $el.Count; $i=$i+2) {
$table[$el[$i].innerText] = $el[$i+1].innerText
}
おお、これなら引っこ抜ける。
さらにこれを複数のプロファイルのデータを引っこ抜けるように拡張します。
$file=(ls *.mobileconfig).Name
function mydata(
[Parameter(ValueFromPipeline=$true)] $param){
begin{
$hash=@{}
$data
$list=@()
}
process{
#echo $param
$xmlobj=[xml](get-content -raw $param -Encoding UTF8)
$el=$xmlobj.plist.dict.array.dict.dict.SelectNodes('*')
for ($i=0; $i -lt $el.Count; $i=$i+2) {
$hash[$el[$i].innerText] = $el[$i+1].innerText
}
$data=[PSCustomObject]$hash
$data=$data | Select-Object SharedSecret,AuthName,AuthPassword
$list+=$data
}
end{
$list
}
}
$vpnlist=$file | mydata
$vpnlist | Export-Csv vpnlist.csv -Encoding utf8 -NoTypeInformation
これでcsvの一覧ができました。
下記が作ったSample Code
profile2csv - GitHub
#Templateとcsv一覧からiOSプロファイルを作成
上のソースでVPNのユーザー名とパスワードの一覧を抜き出せた。
PowerShellに -replace という命令がある。
これを使えばtemplateっぽいことができるのでは?
vpn接続するprofileをもとにvpn.templateを作った。
下記のようになっている。
<key>RemoteAddress</key>
<string>rc.umiyama.co.jp</string>
<key>SharedSecret</key>
<string>Sazaesan</string>
<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>
<string>{AuthName}</string>
<key>XAuthPassword</key>
<string>{AuthPassword}</string>
{AuthName}と{AuthPassword}にユーザー名とパスワードをreplaceで挿入。
そのAuhtNameのmobileconfigを作っていく。
というようなスクリプトを書けばいい。
それが下記のCode
# load data
$data=Import-Csv -Path .\vpnlist.csv -Encoding UTF8
foreach($d in $data){
# load template
$temp=Get-Content .\vpn.template -Encoding UTF8
# merge template
$temp=$temp -replace '{AuthName}',$d.AuthName
$temp=$temp -replace '{AuthPassword}',$d.AuthPassword
$file=$d.AuthName+'.mobileconfig'
# output newfile
$temp | out-file -FilePath $file -Encoding utf8
}
このconfigファイルを読み込んでいけば設定完了だ。
下記が作ったSample Code
csv2profile - GitHub