วิธีการทำสคริปต์สำหรับกำหนดค่าการเชื่อมต่อ RMUTI-WiFi (Microsoft Windows)

From Prakai Nadee

บทนำ

หลังจากมหาวิทยาลัยได้ติดตั้งและให้บริการเครือข่ายคอมพิวเตอร์แบบไร้สายภายใน มทร.อีสาน ศูนย์กลาง มีบริการหลัก 2 ชื่อ คือ RMUTI-WiFi สำหรับบริการภายใน และ eduroam สำหรับบุคลากรที่ของหน่วยงานที่เป็นสมาชิก eduroam (อ่านรายละเอียดเพิ่มเติมได้ที่ http://eduroam.rmuti.ac.th) การให้บริการทั้งสองแบบ มีการจัดการด้านความปลอดภัยแบบ WPA2-Enterprise มีการเข้ารหัสข้อมูลในระดับของการเชื่อมต่อเครือข่าย จึงจำเป็นต้องกำหนดคุณสมบัติของอุปกรณ์ให้ถูกต้อง การกำหนดคุณสมบัติสำหรับอุปกรณ์หรือระบบปฏิบัติการรุ่นใหม่ สามารถทำได้ง่าย ไม่ต้องติดตั้งอะไรเพิ่มเข้าไปในเครื่อง แต่สำหรับอุปกรณ์หรือระบบปฏิบัติการรุ่นเก่าจะมีความซับซ้อน โดยเฉพาะกับ Microsoft Windows รุ่นเก่า เช่น Windows XP ที่จำเป็นต้องจัดการด้วยมือ (Manual Setting) หลายขั้นตอน หากการดำเนินการผิดขั้นตอน หรือผิดพลาดในบางขั้นตอน จะทำให้ไม่สามารถใช้งานได้

การกำหนดคุณสมบัติการเชื่อมต่อ RMUTI-WiFi ของ Microsoft Windows แต่ละรุ่น มีขั้นตอนไม่เหมือนกัน โดยมีข้อสรุปที่ต้องดำเนินการตามรุ่น ดังตาราง

ลำดับขั้นการดำเนินการ รุ่นของ Microsoft Windows
Windows XP Windows 7 Windows 8
1. การติดตั้ง Root Certificate ดำเนินการด้วยมือ (คู่มือ) ดำเนินการด้วยมือ (คู่มือ) ไม่ต้องดำเนินการ
2. การติดตั้ง Personal Certificate ดำเนินการด้วยมือ (คู่มือ) ไม่ต้องดำเนินการ ไม่ต้องดำเนินการ
3. การสร้าง WiFi Profile ดำเนินการด้วยมือ (คู่มือ) ดำเนินการอัตโนม้ติ ดำเนินการอัตโนมัติ

จากตาราง พบว่า กรณี Windows XP จำเป็นต้องมีการดำเนินการด้วยมือทุกขั้นตอน สำหรับผู้ใช้ที่เป็นนักคอมพิวเตอร์สามารถดำเนินการเองได้ แต่บุคคลอื่นที่ไม่ใช่จะถือว่าเป็นขั้นตอนที่ยุ่งยากมาก ดังนั้น หากมีเครื่องมือหรือโปรแกรมที่สามารถจัดการให้ทั้งหมดจากการเรียกใช้เพียงครั้งเดียว จะทำให้ง่ายต่อผู้ใช้

เครื่องมือประกอบการสร้างสคริปต์

โปรแกรมหรือเครื่องมือบนอินเทอร์เน็ตที่มีให้ดาวน์โหลดมาใช้ประกอบการกำหนดค่าการเชื่อมต่อ RMUTI-WiFi มีหลายโปรแกรม แต่ละโปรแกรมจะสามารถดำเนินการได้เฉพาะเรื่อง มีดังต่อไปนี้

โปรแกรมสำหรับนำเข้า Root Certificate Authority

อ่านรายละเอียดการใช้งานได้ที่ เครื่องมือสำหรับนำเข้า Root Certificate Authority (Microsoft Windows)

โปรแกรมสำหรับนำเข้า Personal Certificate

อ่านรายละเอียดการใช้งานได้ที่ เครื่องมือสำหรับนำเข้า Personal Certificate (Microsoft Windows)

โปรแกรมสำหรับนำเข้าโพรไฟล์การเชื่อมต่อเครือข่ายไร้สาย

อ่านรายละเอียดการใช้งานได้ที่ เครื่องมือสำหรับจัดการโพรไฟล์ของเครือข่ายไร้สาย (Microsoft Windows)

สคริปต์สำเร็จรูปสำหรับใช้งานเพื่อการนำเข้าโพรไฟล์

จากรายการเครื่องมือในห้วข้อก่อนหน้านี้ เครื่องมือทั้งหมดสามารถเรียกใช้งานในลักษณะของ Command Line หรือเรียกใช้โดยไม่ต้องมีการแสดงผลการทำงานได้ จึงสามารถนำมาเป็นคำสั่งที่เกิดจากการเรียกใช้โดยสคริปต์

ลำดับขั้นตอนการทำงานในสคริปต์ มีลำดับดังนี้

  1. ตรวจสอบและอ่านค่ารุ่นของ Microsoft Windows
  2. ตรวจสอบและอ่านรายการแผงวงจรเครือข่ายไร้สาย
  3. ติดตั้ง RMUTI Root Certificate Authority
  4. ติดตั้ง RMUTI Personal Certificate
  5. นำเข้าโพรไฟล์การเชื่อมต่อเครือข่าย

ทำความรู้จักกับ VB Script

ใน Microsoft Windows ทุกรุ่น สามารถเขียนโปรแกรมในลักษณะของสคริปต์ด้วยภาษา Virtual Basic Script (VB Script) ซึ่งเป็นไฟล์ข้อความ สามารถเขียนขึ้นและเรียกใช้ได้ทันที ไม่ต้องมีโปรแกรมคอมไพล์ (Compile) สคริปต์แบบ VB Script ต้องบันทึกเป็นไฟล์ที่มีส่วนขยายเป็น .vbs ชื่อไฟล์ในการสร้างสคริปต์นี้คือ RMUTI-WiFi.vbs

โค้ดต่อไปนี้ เป็นส่วนต้นของสริปต์ เป็นส่วนการประกาศตัวแปรภายนอก (Variable) เก็บข้อมูลหลัก และตัวแปรวัตถุ (Object) สำหรับใช้เข้าถึงระบบ

 1 Option Explicit
 2 'Install RMUTI wireless profile
 3 ' Supported platforms:  Windows Vista, XP (with Service Pack 2 or 3), 7 and 8
 4 ' Requires external tools:
 5 '  - CertMgr.exe: Microsoft Certificate Manager Tool (http://msdn.microsoft.com/en-us/library/e78byta0(v=vs.110).aspx)
 6 '  - winhttpcertcfg.exe: Microsoft Certificate Configuration Tool (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384088(v=vs.85).aspx)
 7 '  - WLAN.exe: Symantec capture and deploy WLAN profiles tool (http://www.symantec.com/business/support/index?page=content&id=HOWTO9771)
 8 '  - WindowsXP-KB918997-v6-x86-ENU.exe: HotFix installer for Wireless LAN API(KB918997, http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=52A43BAB-DC4E-413F-AC71-158EFD1ADA50&displaylang=en)
 9 ' Requires external files:
10 '  - RMUTI-CA.crt: Root certificate file
11 '  - RMUTI-WiFi.p12: Personal certificate file
12 '  - RMUTI-WiFi-<WinVer>.xml: XML configuration files for each Windows Version
13 
14 ' declare variants
15 Dim oShell, oUserEnv, oFSO
16 Dim sPath, oFile, sFolder
17 Dim iSPVer
18 Dim sTempEnv, strComputer, sOS
19 Dim sResultMsg
20 Dim bSuccess
21 dim sIntId
22 
23 'define variants
24 bSuccess = False
25 strComputer = "."
26 
27 'instantiate global objects
28 Set oShell = WScript.CreateObject("WScript.Shell")
29 Set oFSO = CreateObject("Scripting.FileSystemObject")
30 sTempEnv = oShell.ExpandEnvironmentStrings("%TEMP%") & ""
31 
32 sPath = Wscript.ScriptFullName
33 Set oFile = oFSO.GetFile(sPath)
34 sFolder = oFSO.GetParentFolderName(oFile) 
35 oShell.CurrentDirectory = sFolder
36 
37 WScript.Echo "ยินดีต้อนรับ: สคริปต์นี้ใช้สำหรับติดตั้งดังต่อไปนี้" & vbCrLf _
38 			 & " - ติดตั้ง Root Certificate ชื่อ RMUTI CA" & vbCrLf _
39 			 & " - ติดตั้ง Personal Certificate ชื่อ WiFi" & vbCrLf _
40 			 & " - สร้างโพรไฟล์เครือข่ายไร้สายชื่อ RMUTI-WiFi" & vbCrLf _
41 			 & " - สร้างโพรไฟล์เครือข่ายไร้สายชื่อ eduroam"

การประกาศตัวแปรใน VB ใช้คำสั่ง Dim โดยไม่จำเป็นต้องระบุประเภทของตัวแปร ดังบรรทัดที่ 15-21

บรรทัดที่ 32-35 เป็นการอ่านค่าตำแหน่งไดเร็กทอรี่ของสคริปต์นี้และย้ายตำแหน่งการทำงานปัจจุบันไปยังตำแหน่งที่ได้ เพื่อให้ง่ายต่อการอ้างอิงตำแหน่งไฟล์อื่นที่ใช้ประกอบการทำงานของสคริปต์ หมายถึง การเรียกใช้สคริปต์นี้ สามารถเรียกใช้ที่ใดก็ได้ แต่เมื่อเริ่มต้นการทำงาน สคริปต์จะย้ายตำแหน่งการทำงานไปยังตำแหน่งของสคริปต์

บรรทัดที่ 37-41 เป็นการแสดงข้อความทักทายผู้ใช้ ด้วยการใช้ WScript.Echo

ตรวจสอบและอ่านค่ารุ่นของ Microsoft Windows

เพื่อใช้ประกอบการนำเข้าไฟล์ที่บันทึกโพรไฟล์การเชื่อมต่อเครือข่ายที่มีความต่างกันระหว่าง Windows แต่ละรุ่น โดยแต่ละโพรไฟล์จะบันทึกแยกเป็นไฟล์ต่างกัน

 1 'get Windows version and service pack version
 2 fDetectOS sOS, iSPVer
 3 
 4 function fDetectOS(sOS, iSPVer)
 5 'Detect OS Function - detects OS Caption string and Service Pack integer from WMI WIN32_OperatingSystem.
 6 ' Expects to variables passed, returns the full OS Caption String, and SP Major Version integer
 7 
 8     'Declare variables
 9     Dim colItems
10     Dim objWMIService, objItem
11     'Instantiate local objects/collections
12 	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
13 
14     Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
15 
16     For Each objItem In colItems
17       sOS = objItem.Caption
18       iSPVer = cInt(objItem.ServicePackMajorVersion)
19     Next
20 
21     Set objItem = Nothing
22     Set colItems = Nothing
23     Set objWMIService = Nothing
24 	
25 End function

ส่วนของการอ่านค่ารุ่นของ Windows เขียนให้อยู่ในรูปแบบของฟังก์ชั่น (Function) โดยค่าที่ได้จากการเรียกใช้ฟังก์ชั่นคือ ตัวแปร sOS เป็นชื่อระบบปฏิบัติการ เช่น "Microsoft Windows 8.1 Pro" และ iSPVer เป็นหมายเลข Service Pack เช่น "0"

การตรวจสอบว่าสคริปต์นี้ถูกเรียกใช้บนระบบปฏิบัติการ Windows รุ่นใด จะใช้การค้นหาข้อความเฉพาะในตัวแปร sOS เช่น หากพบข้อความ "XP" แสดงว่าเป็น Windows XP หรือหากพบข้อความ "Windows 7" แสดงว่าเป็น Windows 7 เป็นต้น

คำสั่งสำหรับการค้นหาข้อความในตัวแปรคือ inStr(ตัวแปร, ข้อความที่ต้องการค้นหา) ผลการเรียกใช้ฟังก์ชั่น จะได้ลำดับของตำแหน่งที่ข้อความนั้นมีอยู่ในตัวแปร ดังตัวอย่างของสคริปต์

 1 If inStr(sOS, "Vista") > 0 Then
 2     WScript.Echo "สคริปต์นี้ไม่รองรับระบบปฏิบัติการ Microsoft Windows Vista" & vbCrLf
 3 ElseIf inStr(sOS, "XP") > 0 Then
 4         If iSPVer = 2 Then
 5             WScript.Echo "ตรวจพบระบบปฏิบัติการ Microsoft Windows XP SP2" & vbCrLf
 6         ElseIf iSPVer = 3 Then
 7             WScript.Echo "ตรวจพบระบบปฏิบัติการ Microsoft Windows XP SP3" & vbCrLf
 8         Else
 9             WScript.Echo "สคริปต์นี้ไม่รองรับระบบปฏิบัติการ Microsoft Windows รุ่นนี้" & vbCrLf
10         End If
11 ElseIf inStr(sOS, "Windows 7") > 0 Then
12     ' ติดตั้งต่อไป
13 End If

ตรวจสอบว่ามีแผงเชื่อมต่อเครือข่ายไร้สายหรือไม่

การดำเนินการของสคริปต์นี้ จะทำได้กับเฉพาะเครื่องที่มีแผงวงจรเครือข่ายไร้สายเท่านั้น หากมี จะต้องอ่านค่าเลขประจำตัวแผงวงจรเครือข่ายไร้สายสำหรับอ้างอิงในการเรียกใช้เครื่องมือ แต่หากไม่มีก็ไม่จำเป็นต้องดำเนินการต่อไป

 1 'get wireless lan interface id
 2 fGetWlanInterfaceId
 3 
 4 function fGetWlanInterfaceId()
 5 'Get Wireless Interface Id/GUID
 6 
 7     'Declare variables
 8     Dim oExec
 9     Dim sRet
10 	
11     Set oExec = oShell.Exec("WLAN.exe ei")
12 	
13     If oExec.Status = 0 Then
14         Do While Not oExec.StdOut.AtEndOfStream
15             sRet = oExec.StdOut.ReadLine()
16             If inStr(sRet, "GUID") > 0 Then
17                 sIntId = Replace(sRet, "GUID: ", "")
18                 Exit Do
19             End If
20         Loop
21     End If
22 	
23     Set oExec = Nothing
24 	
25 End function

ส่วนการตรวจสอบและอ่านค่าหมายเลขแผงวงจรเครือข่ายไร้สายทำเป็นฟังก์ชั่น ภายในจะเรียกใช้เครื่องมือภายนอกคือ WLAN.exe (รายละเอียดการเรียกใช้โปรแกรม WLAN.exe) และอ่านข้อความผลการทำงานของ WLAN.exe และตัดเอาเฉพาะหมายเลขแผงวงจรเครือข่าย จากบรรทัดที่มีคำว่า GUID

หากมีแผงวงจรเครือข่ายไร้สาย จะได้หมายเลขจาก GUID แต่ถ้าไม่มี จะได้ค่าเป็นข้อความว่าง ผลลัพท์จะบันทึกไว้ในตัวแปรภายนอกชื่อ sIntId เพื่อใช้ในขั้นตอนอื่นต่อไป

ติดตั้ง RMUTI Root Certificate Authority

การติดตั้ง Root Certificate Authority จะทำงานผ่านการเรียกใช้โปรแกรม CertMgr.exe (รายละเอียดการเรียกใช้โปรแกรม CertMgr.exe) โดยการนำเข้าไฟล์ที่มี RMUTI Root Certificate Authority ชื่อ RMUTi-CA.crt และการดำเนินการนี้ไม่มีข้อแตกระหว่าง Windows แต่ละรุ่น ดังสคริปที่เขียนเป็นฟังก์ชั่นต่อไปนี้

 1 subInstRootCert
 2 
 3 Sub subInstRootCert
 4 'Install RMUTI Root CA
 5 ' Require RMUTI Root CA file (RMUTi-CA.crt)
 6 
 7     Dim iRC
 8 	
 9     iRC = oShell.Run("certmgr.exe -c -s -r localMachine root | find ""RMUTi CA""", 0, True)
10     If iRC = -1 Then
11         iRC = oShell.Run("certmgr.exe -add -c RMUTi-CA.crt -s -r localMachine root", 0, True)
12         If iRC = 0 Then
13             sResultMsg = sResultMsg &  " - ติดตั้ง Root Certificate ชื่อ ""RMUTi CA"" เสร็จสมบูรณ์" & vbCrLf
14         Else
15             sResultMsg = sResultMsg & " - ไม่สามารถติดตั้ง Root Certificate ชื่อ ""RMUTi CA"" ได้ คุณต้องติดตั้งด้วยตนเอง " _
16                 & "อ่านรายละเอียดเพิ่มเติมได้ที่ http://www.rmuti.ac.th/network/wp/network/import-rmuti-root-ca-windows " _
17                 & vbCrLf
18         End If
19     Else
20         sResultMsg = sResultMsg &  " - มีการติดตั้ง Root Certificate ชื่อ ""RMUTi CA"" อยู่ก่อนแล้ว" & vbCrLf
21     End If
22 
23 End Sub

ติดตั้ง RMUTI WiFi Personal Certificate

การติดตั้ง Personal Certificate จะทำงานผ่านการเรียกใช้โปรแกรม winhttpcertcfg.exe (รายละเอียดการเรียกใช้โปรแกรม winhttpcertcfg.exe) โดยการนำเข้าไฟล์ที่มี RMUTI WiFi Certificate ชื่อ WiFi-2014-09-11.p12 และการดำเนินการนี้ไม่มีข้อแตกระหว่าง Windows แต่ละรุ่น ดังสคริปที่เขียนเป็นฟังก์ชั่นต่อไปนี้

 1 subInstWiFiCert
 2 
 3 Sub subInstWiFiCert
 4 'Install personal certification for WiFi client
 5 ' Require personal certification file (WiFi.p12)
 6 
 7     Dim iRC
 8 
 9     iRC = oShell.Run("winhttpcertcfg.exe -i WiFi-2014-09-11.p12 -c CURRENT_USER\My -a ""%USERNAME%"" -p rmutiwifi", 0, True)
10     If iRC = 0 Then
11         sResultMsg = sResultMsg & " - ติดตั้ง Personal Certificate ชื่อ ""WiFi"" เสร็จสมบูรณ์" & vbCrLf
12     Else
13         sResultMsg = sResultMsg & " - ไม่สามารถติดตั้ง Personal Certificate ชื่อ ""WiFi"" ได้ คุณต้องติดตั้งด้วยตนเอง " _
14             & "อ่านรายละเอียดเพิ่มเติมได้ที่ http://www.rmuti.ac.th/network/wp/network/rmuti-wifi-connect-xp " _
15             & vbCrLf
16     End If
17 
18 End Sub

นำเข้าโพรไฟล์การเชื่อมต่อเครือข่าย

การนำเข้าโพรฟล์การเชื่อมต่อเครือข่ายไร้สาย จะทำงานผ่านการเรียกใช้โปรแกรม WLAN.exe ((รายละเอียดการเรียกใช้โปรแกรม WLAN.exe) โดยการนำเข้าไฟล์ที่บันทึกโพรไฟล์การเชื่อมต่อเครือข่ายไร้สาย ไฟล์ที่บันทึกโพรไฟล์ของ Windows แต่ละรุ่นแตกต่างกัน ต้องผ่านการส่งออกมาจากเครื่องที่ใช้เชื่อมต่อเครือข่าย RMUTI-WiFi ได้แล้ว และแยกบันทึกเป็นชื่อที่ต่างกัน เช่น RMUTI-WiFi-XP.xml หรือ RMUTI-WiFi-W7.xml เป็นต้น ดังสคริปที่เขียนเป็นฟังก์ชั่นต่อไปนี้

 1 subImpWiFiProfile "XP"
 2 
 3 Sub subImpWiFiProfile(WinVer)
 4 'Install an WiFi profile using WLAN.exe.
 5 ' Require presence of xml WiFi profile files for each Windows version (RMUTI-WiFi-<WinVer>.xml, RMUTI-eduroam-<WinVer>.xml)
 6 
 7     Dim iRC
 8     If sIntId <> "" Then
 9         iRC = oShell.Run("WLAN.exe sp " & sIntId & " RMUTI-WiFi-" & WinVer & ".xml", 0, True)
10         If iRC = 0 Then
11             sResultMsg = sResultMsg & " - สร้างโพรไฟล์ RMUTI-WiFi เสร็จสมบูรณ์" & vbCrLf
12         Else
13             sResultMsg = sResultMsg & " - ไม่สามารถสร้างโพรไฟล์ RMUTI-WiFi ได้" & vbCrLf
14         End If
15 
16         iRC = oShell.Run("WLAN.exe sp " & sIntId & " RMUTI-eduroam-" & WinVer & ".xml", 0, True)
17         If iRC = 0 Then
18             sResultMsg = sResultMsg & " - สร้างโพรไฟล์ eduroam เสร็จสมบูรณ์" & vbCrLf
19         Else
20             sResultMsg = sResultMsg & " - ไม่สามารถสร้างโพรไฟล์ eduroam ได้" & vbCrLf
21         End If
22     End If
23 
24 End Sub

การเรียกใช้ฟังก์ชั่น จะส่งข้อความที่ตรงกับชื่อไฟล์ที่ตรงกับ Windows แต่ละรุ่น เช่น "XP", "W7" หรือ "W8" เป็นต้น เพื่อให้ฟังก์ชั่นนำไปประกอบกับข้อความของชื่อไฟล์บันทึกโพรไฟล์การเชื่อมต่อเครือข่ายไร้สาย

สคริปต์

  • RMUTI-WiFi.vbs Version 1.0 (File:RMUTI-WiFi.vbs)
    • ยังไม่ได้ลองกับ Windows XP
    • การกรอกชื่อบัญชีและรหัสผ่านเพื่อเชื่อมต่อครั้งแรกจะไม่ผ่าน จำเป็นต้องทำซ้ำครั้งที่สองจึงจะเชื่อมต่อได้
    • ไม่มีตัวเลือกให้ยกเลิกการเชื่อมต่ออัตโนมัติใน Windows 7 เมื่อเชื่อมต่อเสร็จแล้วระบบปฏิบัติการจะจำข้อมูลการเชื่อมต่อและใช้ตลอดไป ซึ่งเป็นปัญหากับคอมพิวเตอร์ที่มีผู้ใช้หลายคน
    • คงไม่จำเป็นสำหรับ Windows 8 :)

อ้างอิง


MediaWiki spam blocked by CleanTalk.