🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

มาเปรียบเทียบและทำความเข้าใจความแตกต่างระหว่าง PowerShell และ cmd กันเถอะ [พร้อมภาพประกอบ]

เมื่อพูดถึง "จอสีดำ" ของ Windows หลายคนอาจจะนึกถึง "Command Prompt (cmd.exe)" ที่มีมาแต่โบราณ แต่ในบทความที่ผ่านมา เราได้เรียนรู้เกี่ยวกับ "PowerShell" ที่ทันสมัยและทรงพลังกว่า ซึ่งมีพื้นหลังสีน้ำเงินเป็นเอกลักษณ์ ทั้งสองอย่างนี้ดูเผินๆ อาจจะคล้ายกัน แต่ความจริงแล้วแตกต่างกันอย่างสิ้นเชิง

หลายคนคงมีคำถามว่า "ทำไมถึงมี 2 อย่าง?", "สุดท้ายแล้วควรใช้อันไหนดี?", "cmd มันเก่าไปแล้วหรือยัง?" ในบทความนี้ เราจะมาเปรียบเทียบความแตกต่างระหว่างคู่แข่งตลอดกาล (?) อย่าง PowerShell และ Command Prompt ด้วยการยกตัวอย่างงานที่เป็นรูปธรรม พร้อมอธิบายให้มือใหม่เข้าใจได้ง่ายๆ

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


ความแตกต่างที่ใหญ่ที่สุดและชี้ขาด: "อ็อบเจกต์" ปะทะ "ข้อความ"

ความแตกต่างที่รากฐานที่สุดระหว่าง PowerShell และ cmd ก็คือ รูปแบบของข้อมูลที่คำสั่งส่งคืนกลับมา การทำความเข้าใจจุดนี้คือกุญแจสำคัญที่จะไขความกระจ่างในความแตกต่างของทั้งสอง

โลกทัศน์ของ Command Prompt (cmd): ทุกสิ่งคือ "ข้อความ"

เมื่อคุณพิมพ์คำสั่งอย่าง dir ใน Command Prompt สิ่งที่ปรากฏบนหน้าจอก็คือ "ข้อความ (สตริง)" ธรรมดาๆ ที่ถูกจัดรูปแบบมาเพื่อให้มนุษย์อ่าน มันเหมือนกับรายการที่พิมพ์อยู่บนกระดาษ การจะดึงเอาเฉพาะ "ชื่อไฟล์" หรือ "วันที่แก้ไขล่าสุด" ออกมาจากรายการนี้เพื่อนำไปใช้ในขั้นตอนต่อไปนั้นยุ่งยากมาก และต้องอาศัยการประมวลผลสตริงที่ซับซ้อน

C:\> dir
 Volume in drive C is Windows
 Volume Serial Number is XXXX-XXXX

 Directory of C:\

07/07/2024  09:00 AM              Program Files
07/07/2024  09:05 AM              Users
07/07/2024  09:10 AM              Windows
               0 File(s)              0 bytes
               3 Dir(s)  123,456,789,012 bytes free

ผลลัพธ์ที่ได้นี้เป็นเพียง "การเรียงตัวของอักขระ" และสำหรับโปรแกรมแล้ว มันคือข้อมูลที่ไม่มีโครงสร้าง


โลกทัศน์ของ PowerShell: ทุกสิ่งคือ "อ็อบเจกต์"

ในทางกลับกัน เมื่อคุณรันคำสั่งที่คล้ายกันอย่าง Get-ChildItem ใน PowerShell สิ่งที่ได้กลับมาคือชุดของ "อ็อบเจกต์" ที่มีโครงสร้าง อ็อบเจกต์คือกลุ่มของข้อมูลที่บรรจุข้อมูลต่างๆ (คุณสมบัติ) เอาไว้

【ภาพแนวคิด】หนึ่งใน "อ็อบเจกต์ไฟล์" ที่ Get-ChildItem ส่งคืนมานั้น มีข้อมูลต่อไปนี้จัดเก็บไว้อย่างเป็นระเบียบ:

มันเหมือนกับตารางใน Excel ที่ข้อมูลถูกจัดเรียงไว้อย่างดี ด้วยโครงสร้างนี้เองที่ทำให้ PowerShell สามารถทำงานที่ยืดหยุ่นตามข้อมูลได้อย่างง่ายดายอย่างน่าทึ่ง เช่น "เรียงตามขนาดจากมากไปน้อย" หรือ "แสดงเฉพาะไฟล์ที่มีนามสกุล .txt"

PS C:\> Get-ChildItem

    ไดเรกทอรี: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        07/07/2024     09:00                Program Files
d-----        07/07/2024     09:05                Users
d-----        07/07/2024     09:10                Windows

แม้จะดูคล้ายกัน แต่จุดที่สำคัญที่สุดคือคุณภาพของข้อมูลที่จัดการอยู่เบื้องหลังนั้นแตกต่างกันอย่างสิ้นเชิง


เปรียบเทียบเชิงปฏิบัติ: มาลองเปรียบเทียบด้วยงานที่เฉพาะเจาะจง

เรามาเปรียบเทียบทั้งสองอย่างด้วยงานที่ซับซ้อนขึ้นมาเล็กน้อย: "จากรายการเซอร์วิสที่กำลังทำงานอยู่ ให้แสดงเฉพาะเซอร์วิสที่มีชื่อ 'Windows' อยู่ด้วย โดยเรียงตามลำดับชื่อ"

ความท้าทายใน Command Prompt (cmd)

การจะทำสิ่งนี้ใน cmd นั้นยากมาก คุณสามารถใช้ net start เพื่อดูรายการเซอร์วิสได้ แต่ผลลัพธ์ที่ได้เป็นเพียงข้อความธรรมดา การจะดึงบรรทัดที่มีคำที่ต้องการออกมา แล้วนำมาเรียงลำดับอีกทีนั้น ต้องอาศัยการใช้ findstr, sort และ for loop ที่ซับซ้อน ซึ่งแทบจะเป็นไปไม่ได้เลยสำหรับมือใหม่

C:\> net start
บริการของ Windows ต่อไปนี้ได้เริ่มทำงานแล้ว:

   Application Host Helper Service
   Background Tasks Infrastructure Service
   Base Filtering Engine
   ...
   Windows Audio
   Windows Connection Manager
   Windows Defender Antivirus Service
   ...

การจะดึงเอาเฉพาะข้อมูลที่ต้องการออกมาจากกำแพงข้อความนี้ให้ได้อย่างแม่นยำนั้นเป็นงานที่ยากมาก


ทางออกที่สวยหรูใน PowerShell

ด้วย PowerShell คุณสามารถเขียนคำสั่งนี้ได้อย่างเป็นธรรมชาติในบรรทัดเดียว ต้องขอบคุณอ็อบเจกต์และไปป์ไลน์

Get-Service | Where-Object { $_.DisplayName -like "*Windows*" } | Sort-Object -Property DisplayName

คำสั่งบรรทัดเดียวนี้ทำงานตามลำดับดังนี้:

  1. Get-Service: ดึงข้อมูลเซอร์วิสทั้งหมดมาในรูปแบบ "อ็อบเจกต์"
  2. |: ส่งต่อกลุ่มอ็อบเจกต์ที่ได้ไปยังคำสั่งถัดไป
  3. Where-Object ...: จากอ็อบเจกต์ที่ได้รับมา กรองเอาเฉพาะอันที่มีคำว่า "Windows" อยู่ในชื่อที่แสดงผล (DisplayName property)
  4. |: ส่งต่อผลลัพธ์ที่กรองแล้วไปยังคำสั่งถัดไปอีกครั้ง
  5. Sort-Object ...: นำอ็อบเจกต์ที่ได้รับมาเรียงลำดับตามชื่อที่แสดงผล (DisplayName property)

จากการเปรียบเทียบนี้ คุณคงจะสัมผัสได้ถึงข้อได้เปรียบและความยอดเยี่ยมของ PowerShell ในการจัดการข้อมูลแล้วใช่ไหมครับ


ความแตกต่างของคำสั่งและไวยากรณ์

เพื่อความเข้ากันได้กับ cmd, PowerShell อนุญาตให้ใช้คำสั่งเก่าๆ บางคำสั่งในรูปแบบ "alias (ชื่อเล่น)" ได้ แต่ Cmdlet และไวยากรณ์ดั้งเดิมของมันนั้นถูกออกแบบมาให้ทันสมัยและมีความสอดคล้องกันมากกว่า

การจัดการตัวแปร

cmd: set ชื่อตัวแปร=ค่า

set MYVAR=Hello World

PowerShell: $ชื่อตัวแปร = ค่า

$myVar = "Hello World"

ใน PowerShell กฎคือต้องใส่เครื่องหมาย $ ไว้หน้าชื่อตัวแปร


การแบ่งเงื่อนไข (if statement)

cmd:

if "%MYVAR%"=="Hello World" (echo Same)

PowerShell:

if ($myVar -eq "Hello World") { Write-Host "Same" }

PowerShell ใช้ตัวเปรียบเทียบที่เข้าใจง่ายกว่า เช่น -eq (equal) หรือ -gt (greater than)


cmd ไม่จำเป็นอีกต่อไปแล้วหรือ? อนาคตของเชลล์ใน Windows

คุณอาจจะสงสัยว่า "ถ้า PowerShell สะดวกขนาดนี้แล้ว Command Prompt ก็ไม่จำเป็นแล้วสิ?" คำตอบคือ "ไม่ มันจะไม่หายไปในเร็วๆ นี้ แต่ทุกอย่างที่ทำใหม่ควรทำด้วย PowerShell"

Command Prompt ยังคงถูกติดตั้งมาใน Windows เพื่อรักษาความเข้ากันได้กับระบบที่เก่ามากๆ และไฟล์แบตช์ (.bat) จำนวนมหาศาลที่ถูกสร้างขึ้นในอดีต เป็นไปได้ยากที่ Microsoft จะเลิกใช้มันโดยสิ้นเชิง

อย่างไรก็ตาม จากการที่ PowerShell ถูกตั้งเป็นค่าเริ่มต้นในเครื่องมือเทอร์มินัลมาตรฐานของ Windows อย่าง "Windows Terminal" ก็เป็นที่ชัดเจนว่า Microsoft ได้วางตำแหน่งให้ PowerShell เป็นศูนย์กลางของการจัดการและระบบอัตโนมัติใน Windows สำหรับอนาคต

หากคุณกำลังจะเริ่มเรียนรู้ command line ตั้งแต่ตอนนี้ การเลือก PowerShell ถือเป็นทางเลือกที่ชาญฉลาดอย่างไม่ต้องสงสัย


สรุป

ในครั้งนี้ เราได้เปรียบเทียบความแตกต่างที่สำคัญระหว่าง PowerShell และ Command Prompt (cmd) โดยใช้ภาพประกอบ (ในจินตนาการ) มาช่วย

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