ปรับแต่งเครื่องลูกขณะบูต
ในขณะที่เครื่องลูกบูตเครื่อง เราสามารถปรับแต่งระบบเพื่อให้เหมาะสมกับเครื่องลูกแต่ละเครื่องได้ ทั้งนี้ การปรับแต่งสามารถทำได้ใน 2 ขั้นตอน คือ ก่อนผู้ใช้ Login และหลังผู้ใช้ Login
เนื้อหา
หลักการทำงาน
เมื่อวินโดวส์บูตเครื่อง จะมีการอ่านสคริปต์ต่างๆ ขึ้นมาทำงาน โดยในที่นี้จะเขียนสคริปต์ Batch File สั้นๆ ให้ไปดึงสคริปต์คำสั่งมาจากเซิร์ฟเวอร์อีกที เพื่อให้สะดวกในการปรับแต่สคริปต์โดยไม่ต้องแก้ไขไฟล์ Image
ในที่นี้จะใช้ชื่อโฟลเดอร์ และชื่อไฟล์ดังนี้
เครื่องลูก | เครื่องเซิร์ฟเวอร์ | |
---|---|---|
โฟลเดอร์เก็บโปรแกรม | C:\install | /www/diskserv/app/webroot |
ไฟล์ทำงานก่อน Login | startup.bat | startup.php |
ไฟล์ทำงานหลัง Login | logon.bat | logon.php |
หากต้องการใช้ชื่ออื่นก็สามารถทำได้ โดยแก้ไขชื่อโฟลเดอร์ และชื่อไฟล์ให้ตรงกัน
การดาวน์โหลดสคริปต์จากเซิร์ฟเวอร์
การดาวน์โหลดสคริปต์จากเซิร์ฟเวอร์จะใช้โปรแกรม wget ซึ่งเป็นโปรแกรมฟรีที่สามารถดาวน์ได้จากรายการในหน้า Software เมื่อดาวน์โหลดแล้วให้เก็บไว้ในโฟลเดอร์ C:\install
Batch File
Batch file สำหรับดึงสคริปต์จากเซิร์ฟเวอร์ แล้วเรียกใช้สคริปต์ดังกล่าว และลบสคริปต์ทิ้งเมื่อทำงานเสร็จ
สำหรับการทำงานก่อน Login
@echo off c: cd \install wget -q -O runstartup.bat http://diskserv.localnet/startup.php runstartup.bat del runstartup.bat
ให้บันทึกไฟล์นี้ในโฟลเดอร์ C:\install โดยใช้ชื่อ startup.bat
สำหรับการทำงานหลัง Login
@echo off c: cd \install wget -q -O runlogon.bat http://diskserv.localnet/logon.php runlogon.bat del runlogon.bat
ให้บันทึกไฟล์นี้ในโฟลเดอร์ C:\install โดยใช้ชื่อ logon.bat
การเรียกใช้งาน
การกำหนดให้วินโดวส์เรียกใช้ Batch File ที่สร้างขึ้นในขั้นตอนก่อน และหลัง Login สามารถทำได้ดังนี้
- คลิกปุ่ม Start คลิกเมนู Run...
- พิมพ์คำสั่ง gpedit.msc แล้วกดปุ่ม Enter
- จะเป็นการเรียกโปรแกรม Group Policy ขึ้นมาทำงานดังรูป
- การกำหนดให้เรียก Batch File ก่อน Login มีขั้นตอนดังนี้
- เข้าเมนู Local Computer Policy -> Computer Configuration -> Windows Settings -> Scripts (Startup/Shutdown) ดังรูปข้างต้น
- แผงด้านขวาจะแสดงรายชื่อการทำงาน ซึ่งมี 2 รายการคือ Startup และ Shutdown
- ดับเบิลคลิกที่ Startup โปรแกรมจะแสดงรายชื่อสคริปต์ที่ทำงานขณะ Startup (ก่อน Login) ซึ่งจะยังไม่มีรายการใดๆ
- คลิกปุ่ม Add แล้วพิมพ์ c:\install\startup.bat ในช่อง Script Name แล้วคลิกปุ่ม OK
- โปรแกรมจะกลับมาหน้าแสดงรายชื่อสคริปต์อีกครั้งโดยที่มีสคริปต์ที่เพิ่งเพิ่มเข้าไป ให้คลิกปุ่ม OK เพื่อกลับไปหน้าจอ Group Policy
- การกำหนดให้เรียก Batch File หลัง Login มีขั้นตอนดังนี้
- เข้าเมนู Local Computer Policy -> User Configuration -> Windows Settings -> Scripts (Logon/Logoff ดังรูปข้างต้น
- แผงด้านขวาจะแสดงรายชื่อการทำงาน ซึ่งมี 2 รายการคือ Logon และ Logoff
- ดับเบิลคลิกที่ Logon โปรแกรมจะแสดงรายชื่อสคริปต์ที่ทำงานขณะ Logon (หลัง Login) ซึ่งจะยังไม่มีรายการใดๆ
- คลิกปุ่ม Add แล้วพิมพ์ c:\install\logon.bat ในช่อง Script Name แล้วคลิกปุ่ม OK
- โปรแกรมจะกลับมาหน้าแสดงรายชื่อสคริปต์อีกครั้งโดยที่มีสคริปต์ที่เพิ่งเพิ่มเข้าไป ให้คลิกปุ่ม OK เพื่อกลับไปหน้าจอ Group Policy
โปรแกรมในเซิร์ฟเวอร์
ในเซิร์ฟเวอร์จะต้องมีโปรแกรมรองรับการเรียกใช้จากเครื่องลูก โดยมีหลักการทำงานดังนี้
- ตรวจสอบ IP ของเครื่องลูก
- ส่งสคริปต์ที่เหมาะสมให้เครื่องลูก
การปรับแต่งก่อนผู้ใช้ Login
การปรับแต่งเครื่องลูกก่อนผู้ใช้ Login จะเป็นการปรับแต่งที่ระบบโดยตรง เช่น
- ปรับขนาดของจอภาพ
- สร้าง Virtual Memory Paging File
- ลบโปรแกรม (กรณีซื้อสิทธิ์การใช้ไม่ครบทุกเครื่อง)
ตัวอย่างสถาณการณ์
สมมติว่าในจำนวน 10 เครื่อง มีส่วนประกอบที่แตกต่างกันบ้าง ดังนี้
- ซื้อลิขสิทธิ์ Microsoft Office มา 5 ชุด โดยให้ใช้ได้เฉพาะเครื่อง 1 - 5 เท่านั้น
- เครื่อง 6 - 10 มีหน่วยความจำน้อยกว่าเครื่อง 1 - 5 จึงต้องทำ Virtual Memory ที่เครื่อง 6 - 10 ด้วย
- จอของแต่ละเครื่องมีความแตกต่างกันดังนี้
- เครื่อง 1 - 5 เป็นจอ LED 23 นิ้ว ความละเอียด 1920 x 1080
- เครื่อง 6 - 8 เป็นจอ LCD 20 นิ้ว ความละเอียด 1600 x 900
- เครื่อง 9 เป็นจอ LCD 17 นิ้ว ความละเอียด 1280 x 1024
- เครื่อง 10 เป็นจอ CRT 17 นิ้ว ความละเอียด 1024 x 768
ตัวอย่างไฟล์
จากเงื่อนไขข้างต้น สามารถสร้างไฟล์ startup.php ได้ดังนี้
<?php /* * Script for run commands on client machine after boot * - delete certain item base on client's IP * - setup virtual memory swap file */ // Get client IP $ip = $_SERVER['REMOTE_ADDR']; // Configurations // Delete files, folders $file_lists = array( 1 => array( array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Excel.lnk'), array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft PowerPoint.lnk'), array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Word.lnk'), array('type' => 'D', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Office Tools'), array('type' => 'D', 'name' => 'C:\Program Files\Microsoft Office') ) ); $computer_cleans = array( '192.168.2.6' => 1, '192.168.2.7' => 1, '192.168.2.8' => 1, '192.168.2.9' => 1, '192.168.2.10' => 1 ); // Create paging file $create_swap = array( '192.168.2.6', '192.168.2.7', '192.168.2.8', '192.168.2.9', '192.168.2.10' ); // Set screen resolution $resolutions = array( '1024x768' => 'h1024 v768 b32 f70', '1280x1024' => 'h1280 v1024 b32 f60', '1600x900' => 'h1600 v900 b32 f60', '1920x1080' => 'h1920 v1080 b32 f60' ); $computer_resolutions = array( '192.168.2.1' => '1920x1080', '192.168.2.2' => '1920x1080', '192.168.2.3' => '1920x1080', '192.168.2.4' => '1920x1080', '192.168.2.5' => '1920x1080', '192.168.2.6' => '1600x900', '192.168.2.7' => '1600x900', '192.168.2.8' => '1600x900', '192.168.2.9' => '1280x1024', '192.168.2.10' => '1024x768' ); // Print script // Hide command echo "@echo off\n"; // Delete files, folders if (!empty($file_lists[$computer_cleans[$ip]])) { foreach ($file_lists[$computer_cleans[$ip]] as $file) { if ($file['type'] == 'F') { echo "del /q /f \"{$file['name']}\"\n"; } else { echo "rmdir /q /s \"{$file['name']}\"\n"; } } } // Create paging file if (in_array($ip, $create_swap)) { echo "cscript //h:cscript //s\n"; echo "pagefileconfig /create /i 1536 /m 1536 /vo c:\n"; } // Set screen resolution if (!empty($resolutions[$computer_resolutions[$ip]])) { echo "setres {$resolutions[$computer_resolutions[$ip]]}\n"; }
ไฟล์ startup.php จะแบ่งเป็น 2 ส่วนหลักๆ คือ
- Configurations
- Print script
โดยแต่ละส่วนจะแยกเป็น 3 ส่วนย่อยเพื่อทำงานดังนี้
- Delete files, folders - เพื่อลบไฟล์ และโฟลเดอร์ที่ระบุ ในเครื่องที่กำหนด
- Create paging file - เพื่อสร้าง Virtual Memory ในเครื่องที่กำหนด
- Set screen resolution - เพื่อกำหนดความละเอียดหน้าจอของแต่ละเครื่อง
ในการใช้ไฟล์นี้ ให้แก้ไขเฉพาะในส่วน Configurations เท่านั้น แต่ถ้าต้องการเพิ่มเติมความสามารถของสคริปต์ ก็สามารถทำได้ตามต้องการ
ลบไฟล์, โฟลเดอร์
จากตัวอย่าง จะต้องลบไฟล์ของ Microsoft Office มีการกำหนดค่า 2 ส่วน
ส่วนแรกเป็นการระบุไฟล์ และโฟลเดอร์ที่จะลบ ดังนี้
$file_lists = array( 1 => array( array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Excel.lnk'), array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft PowerPoint.lnk'), array('type' => 'F', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Word.lnk'), array('type' => 'D', 'name' => 'C:\Documents and Settings\All Users\Start Menu\Programs\Microsoft Office Tools'), array('type' => 'D', 'name' => 'C:\Program Files\Microsoft Office') ) );
- บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
- บรรทัดที่สองเป็นรูปแบบที่ต้องการลบ ในที่นี้มีเพียงแบบเดียว ก็ใช้เลข 1
- บรรทัดที่ 3 - 7 เป็นรายชื่อไฟล์ และโฟลเดอร์ที่ต้องการลบ โดยมีรูปแบบดังนี้
- type เป็น F หมายถึงการลบไฟล์, type เป็น D หมายถึงการลบโฟลเดอร์ (Directory)
- name คือชื่อไฟล์ หรือโฟลเดอร์ที่ต้องการลบ
ในที่นี้จะลบรายการใน Start Menu ซึ่งมี 4 รายการ และลบโฟลเดอร์โปรแกรม Microsoft Office
ส่วนที่สองเป็นการระบุว่าจะให้ลบในเครื่องใดบ้าง ดังนี้
$computer_cleans = array( '192.168.2.6' => 1, '192.168.2.7' => 1, '192.168.2.8' => 1, '192.168.2.9' => 1, '192.168.2.10' => 1 );
จะเป็นการระบุว่า เครื่อง 192.168.2.6 จนถึงเครื่อง 192.168.2.10 ให้ลบไฟล์ตามรูปแบบ 1
คำเตือน การปรับปรุง Image (การ Merge) ห้ามทำจากเครื่องที่มีการลบไฟล์/โฟลเดอร์ เพราะจะทำให้เป็นการลบไฟล์/โฟลเดอร์ใน Image หลักด้วย
สร้าง Virtual Memory
กรณีเครื่องที่ใช้งานมีหน่วยความจำไม่เท่ากัน และต้องการสร้าง Virtual Memory (paging file) ในบางเครื่องเท่านั้น ก็สามารถทำได้ โดยการสร้าง Image ที่ไม่มี Virtual Memory แล้วมาสร้าง Virtual Memory ให้กับเครื่องที่ต้องการในตอนบูตเครื่อง ดังนี้
$create_swap = array( '192.168.2.6', '192.168.2.7', '192.168.2.8', '192.168.2.9', '192.168.2.10' );
เป็นการระบุว่า เครื่อง 192.168.2.6 ถึงเครื่อง 192.168.2.10 ให้มีการสร้าง Virtual Memory ด้วย โดยจะสร้างไฟล์ขนาด 1536 MiB ในแต่ละเครื่อง (ในที่นี้ไม่ได้ทำเป็น config ไว้ แต่สามารถแก้ไขได้ในส่วนของโปรแกรมโดยตรง)
คำเตือน การปรับปรุง Image (การ Merge) ห้ามทำจากเครื่องที่มีการสร้าง Virtual Memory เพราะจะทำให้ Image หลักมีการสร้าง Virtual Memory ด้วย
กำหนดความละเอียดหน้าจอ
การกำหนดความละเอียดของหน้าจอ สามารถทำได้โดยใช้โปรแกรม setres ซึ่งสามารถดาวน์โหลดได้จากรายการในหน้า Software เมื่อดาวน์โหลดแล้วให้เก็บไว้ในโฟลเดอร์ C:\install
การกำหนดค่าความละเอียดหน้าจอ มี 2 ส่วน คือ
ส่วนแรกเป็นการกำหนดขนาด ดังนี้
$resolutions = array( '1024x768' => 'h1024 v768 b32 f70', '1280x1024' => 'h1280 v1024 b32 f60', '1600x900' => 'h1600 v900 b32 f60', '1920x1080' => 'h1920 v1080 b32 f60' );
- บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
- บรรทัดที่ 2 - 5 เป็นรูปแบบต่างๆ ของหน้าจอ สามารถแก้ไข, เพิ่มเติม หรือลบรูปแบบที่ไม่ต้องการได้ ชื่อด้านหน้าสามารถตั้งชื่อได้ตามต้องการ ส่วนพารามิเตอร์ด้านหลังมีรายละเอียดดังนี้
- hxxxx คือความกว้างของหน้าจอ กำหนดค่าให้ตรงกับขนาดของจอ
- vxxxx คือความสูงของหน้าจอ กำหนดค่าให้ตรงกับขนาดของจอ
- bxx คือบิตสี โดยปกติแล้วการ์ดจอปัจจุบัน และการ์ดจอที่มีอายุไม่เกิน 10 ปี สามารถใช้ b32 ได้ สำหรับการ์ดจอเก่าอาจต้องปรับเป็น b24, b16 หรือ b15
- fxx คืออัตราการ refresh หน้าจอ ถ้าเป็นจอ LCD, LED ให้ใช้ f60 ถ้าเป็นจอ CRT ให้ทดลองใช้ค่า f70, f72, f75, f85
ส่วนที่สองเป็นการระบุว่าเครื่องใดจะใช้รูปแบบหน้าจอใด ดังนี้
$computer_resolutions = array( '192.168.2.1' => '1920x1080', '192.168.2.2' => '1920x1080', '192.168.2.3' => '1920x1080', '192.168.2.4' => '1920x1080', '192.168.2.5' => '1920x1080', '192.168.2.6' => '1600x900', '192.168.2.7' => '1600x900', '192.168.2.8' => '1600x900', '192.168.2.9' => '1280x1024', '192.168.2.10' => '1024x768' );
- บรรทัดแรกเป็นตัวแปรที่เก็บ config นี้ ห้ามแก้ไข
- บรรทัดที่ 2 - 11 เป็นการเลือกว่าเครื่องใดจะใช้หน้าจอแบบใด โดยระบุชื่อให้ตรงกับใน config แรก
การปรับแต่งหลังผู้ใช้ Login
การปรับแต่งเครื่องลูกหลังจากผู้ใช้ Login แล้ว จะเป็นการปรับแต่งเพิ่มเติมจากการปรับแต่งก่อนผู้ใช้ Login ทั้งนี้เพราะการปรับแต่งบางอย่าง โดยเฉพาะ Registry จะขึ้นอยู่กับผู้ใช้งานที่ Login
ในที่นี้จะปรับแต่งดังนี้
- เปลี่ยน Port ของเกม War Craft III