ก่อนหน้านี้ ผมเคยเขียนบทความเกี่ยวกับ PowerShell ยกย่องคุณสมบัติคล้าย Linux ของมัน ยังมีแอนิเมชันสวยๆ ให้ทุกคนสนุกสนาน อีกหลายปี Microsoft ตัดสินใจ Open-source PowerShell และทำให้พร้อมใช้งานบน Linux (!) และตอนนี้พร้อมสำหรับการทดสอบล่วงหน้า (Early Access)
ผมชอบแนวคิดนี้หลายเหตุผล มันสร้างพื้นที่ร่วมในการพัฒนาและบำรุงรักษาระบบ โดยเฉพาะเมื่อมี Bash สำหรับ Windows ด้วย ทำให้เห็นการกระจกตัวกันของความพยายาม ในระยะยาว ควรทำให้ OS ทั้งสองทำงานร่วมกันได้มีประสิทธิภาพมากขึ้น และผู้ชนะจริงๆ จะเป็นผู้ดูแลระบบ นักพัฒนา และผู้ใช้ปลายทาง มาดูว่ามันทำงานอย่างไร
การติดตั้ง PowerShell
ระบบทดสอบของผมคือ CentOS 7.2 Xfce ซึ่งเป็นหนึ่งใน Distro ที่รองรับ Microsoft ให้ติดตั้งสำหรับ Ubuntu สองรุ่น LTS และ CentOS การติดตั้งง่าย แม้การหาแพคเกจดาวน์โหลดจะมีความซับซ้อนเล็กน้อย ติดตั้งด้วย yum ในเครื่อง แล้วเปิดใช้จาก Command Line
yum install powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm
ต่อไปทำไง?
ผมไม่ใช่ PowerShell User ระดับสูงมาก แต่เป็น Shell คุณแค่ต้องเรียนรู้ Syntax และเริ่มใช้งาน มันสามารถแทนที่ BASH ได้ไหม? ไม่จริงๆ แต่จุดประสงค์ก็ไม่ใช่นั้น อย่างไรก็ตาม ผมเริ่มทดสอบคำสั่งพื้นฐานบางอย่าง เพื่อเข้าใจว่ามันทำงานอย่างไร
ในตอนแรก โมเดลการใช้งานอาจดู Counter-intuitive สำหรับผู้ใช้ Linux แต่ใจความยังคงเหมือนเดิม จุดอ่อนของ PowerShell ตอนนี้คือ Color Code สีเหลืองบนพื้นขาวอ่านไม่ออก คุณอาจอยากเปลี่ยน Theme ของ Terminal
หากงง คุณสามารถเรียก Help ได้ด้วย: help <command> หรือดีกว่า get-help <command> -examples เพื่อดู Syntax และการใช้งานที่ถูกต้อง นี่ช่วยมาก คำสั่งไม่สนใจตัวพิมพ์เล็กใหญ่ (Case-insensitive) แม้จะมีการเขียนตัวพิมพ์ใหญ่อย่างเป็นทางการบางส่วน
บาง Cmdlets มีรุ่นย่อ เช่น Get-ChildItem ชื่อที่ไม่ Intuitive สำหรับฟังก์ชันเทียบเท่า UNIX find ย่อได้เป็น gci อาจสับสนตอนแรก แต่ไม่มากนัก
gci -path /* -include "igor" -recurse
อีกอย่างที่สับสน - Root ทั้งสิ้นเครื่องหมาย Slash นำหน้า แต่เพื่อให้คำสั่งที่ขึ้นกับ Path ทำงานถูกต้อง คุณควรเพิ่ม Asterisk หลัง Slash ไปนั่นแหละ ยังงงอยู่ แต่ผมก็ก้าวเดินเล็กน้อยอย่างคุณ
ทุกอย่างอยู่ที่นี่ แตกต่างเล็กน้อยในรูปลักษณ์ - และแน่นอนชื่อ แต่ดูเหมือนทำงานได้ Shell ค่อนข้างเสถียร ข้อยกเว้นคือ PowerShell ค้างขณะวัดเวลาการค้นหาไฟล์ Recursive ยาวมาก มันหยุดนิ่ง แต่ผมสามารถ Interrupt การทำงานได้
ข้อผิดพลาด (Errors)
PowerShell ระบุรายละเอียดมาก (Verbose) และพลาดบ่อย ซึ่งดูน่ากลัว ด้วยสีแดงและข้อความ Error ที่ยาวเหมือนบน Windows แต่เราพูดถึงเรื่องไร้ความเสียหาย เช่น Permission Denied ขณะค้นหาไฟล์บน Command Line
อีกตัวอย่าง measure-command Cmdlet (เทียบเท่า Linux time) ต้องการ Arguments อยู่ใน Curly Brackets หากพลาด คุณจะได้ Error ใหญ่โตดูน่าตกใจ แต่จริงๆ แล้วไร้ความเสียหาย คำสั่งอื่นๆ เยอะก็แบบนี้
นี่แค่ครึ่งบนของ Error ยังมีอีก
ผู้ใช้ Fedora ทำไง?
Microsoft เปิดตัว PowerShell สำหรับ Ubuntu และ CentOS Fedora นับรวมไหม? ผมไม่ได้สงสัย ผมทดสอบแล้ว การทดลองเล็กน้อยนี้ไม่ราบรื่นเท่าที่คาด ทันทีหลังติดตั้งและพยายามรัน PowerShell ได้ Error สดๆ:
powershell
Failed to initialize CoreCLR, HRESULT: 0x80131500
Error แบบ Generic นี้ มีการอภิปรายยาวนานบน GitHub แต่แทนที่จะทำตามคำแนะนำแบบโง่ ผมอยากยืนยันก่อนว่าปัญหาอยู่ที่ Dependencies libicu ด้วย strace หนึ่งในเครื่องมือ Debug ที่ยอดเยี่ยมในอาร์เซนอลของผม
open("/usr/lib64/libicuuc.so.50", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
แน่นอน ขาดไลบรารีหลายตัว Fedora มีแพคเกจนี้ แต่เป็นรุ่นใหม่กว่าที่ PowerShell คาดหวัง ผมลองแฮ็กด้วยการสร้าง Symbolic Links ช่วยได้เล็กน้อย
ln -s /usr/lib64/libicui18n.so.56 /usr/lib64/libicui18n.so.50
ในที่สุด Error เปลี่ยนจากปัญหา Startup แบบ Generic เป็นปัญหา Symbol ภายใน Shared Object ซึ่งแก้ไขได้ยาก ผมโหลด libicu รุ่นเก่า มา Extract แล้วตั้ง Library Path ให้ PowerShell หา Dependencies ก่อน
export LD_LIBRARY_PATH=<libicu-folder>/:$LD_LIBRARY_PATH
สรุป
นี่คือปี 2016 คุณรัน BASH บน Windows ได้ Native และรัน PowerShell บน Linux ได้ Native ไม่ใช่แค่ Bob เป็นลุงของคุณ คุณก็เป็นลุงของ Bob ด้วย! ผมพอใจกับการพัฒนานี้ มันจะประโยชน์ทุกคนในระยะยาว
PowerShell ไม่ใช่ตัวเลือกแรกของผมสำหรับ Scripting Tool, Language และ Framework แต่มีจุดเด่น และสำหรับคนที่ต้องดูแล Multi-OS Environment อาจลดความซับซ้อนในการบริหารได้มาก Early Alpha Build เสถียรพอสำหรับทดสอบ แต่แนะนำให้หลีกเลี่ยงการทดสอบหนัก โดยเฉพาะไม่ใช่ Root และไม่บน Production System เพื่อความปลอดภัย รวมทั้งหมด ดีพอใช้ ไปเล่นกับคีย์บอร์ดกันเถอะ
Cheers.