วันเสาร์ที่ 30 เมษายน พ.ศ. 2559

เปลี่ยน Label, DriveLetter ในเครื่องของเราด้วย Method Put() บน WMI กันดีกว่า


    ไม่นานมานี้ได้มีโอกาสเขียนสคริปเล็ก ๆ ในการเปลี่ยน DriveLetter ในเครื่อง ซึ่งก็สามารถทำได้หลายวิธี ไม่ว่าจะเป็นการใช้ Diskpart หรือแม้แต่ Method บน WMI ซึ่งบทความนี้เราจะมาใช้ Method บน WMI กันครับ

    ก่อนอื่น เรามาดูข้อมูลในแต่ละ Drive กันก่อนซึ่งจะแสดงให้ดูแบบ 4 แบบด้วยกันคือบน This PC, diskpart, Get-WmiObject และคำสั่ง Get-Volume (เฉพาะ Windows Server 2012 R2 and Windows 8.1 ขึ้นไปเท่านั้น) ตามลำดับ





    ตอนนี้เรามาดูวิธีการเปลี่ยน Label กับ DriveLetter กันครับ


    เริ่มต้นด้วยการเลือก Drive ที่เราจะเปลี่ยนก่อนครับ ซึ่งผมเลือกที่จะเปลี่ยน Drive D: ส่วนวิธีการเปลี่ยนและผลลัพธ์ก็เป็นไปตามภาพด้านล่างเลยครับ



    ...
แล้วเจอกันบทความหน้าครับ

วันเสาร์ที่ 20 กุมภาพันธ์ พ.ศ. 2559

เขียนฟังก์ชัน Validate-Filename, Validate-Path ง่าย ๆ กันดีกว่า


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

    ปกติเวลาเราใส่อักขระต้องห้ามลงไปก็จะมีข้อความเตือนว่าห้ามใช้ ดังรูป


    ใน Powershell เราสามารถนำฟังก์ชันของ .NET มาใช้ได้ ซึ่งฟังก์ชันที่เราจะเขียนต้องใช้มีอะไรบ้าง ไปดูกันเลยครับ


    จากรูปด้านบนทำให้เราทราบว่าอักขระต้องห้ามนั้นมีอะไรบ้าง ทีนี้เรามาดูฟังก์ชันกันดีกว่า ว่าเป็นอย่างไร


   จากรูปด้านบน เราได้เขียนฟังก์ชันชื่อ Validate-Filename โดยที่ฟังก์ชันนี้ต้องใส่ Parameter ชื่อว่า Name ซึ่งก็คือชื่อไฟล์หรือโฟลเดอร์ที่เราต้องการตรวจสอบ จากนั้นฟังก์ชันจะส่งผลลัพธ์ออกมาว่าชื่อที่เราใช้สามารถใช้งานได้หรือไม่ ไปดูตัวอย่างกันครับ


    ถัดมาเป็นฟังก์ชัน Validate-Path และตัวอย่างครับ



...
แล้วเจอกันบทความหน้าครับ


วันเสาร์ที่ 30 มกราคม พ.ศ. 2559

วิธีดูไฟล์ข้างใน Folder, subfolder และวิธีเช็คขนาด Folder [Extra]


    บทความก่อนหน้านี้ (นานมาก) ในหัวข้อ "วิธีดูไฟล์ข้างใน Folder, subfolder และวิธีเช็คขนาด Folder" ได้พูดถึงวิธีการวิธีการข้างต้น แบบพื้นฐานด้วยคำสั่งของ Powershell ซึ่งก็สามารถตอบโจทย์ได้ตามที่เราต้องการยกเว้นเรื่องของ "ความเร็ว" ซึ่งในบทความนี้ เราจะมาพูดถึงวิธีที่เช็คขนาดโฟลเดอร์โดยใช้ในการรับข้อมูลที่เร็วขึ้น เราไปดูกันครับ

เริ่มแรก ผมมีโฟลเดอร์นึง ที่มีขนาดตามภาพครับ


เรามาลองเช็คขนาดโฟลเดอร์ด้วยวิธีเดิมในบทความที่แล้ว แล้วลองจับเวลากันครับ ว่าได้ผลลัพธ์เป็นอย่างไร


จากภาพบน จะเห็นว่า ผลลัพธ์ที่ได้ก็คือ โฟลเดอร์มีขนาด 1.50 GB ตรงตามที่เราต้องการ และความเร็วที่ใช้ในการประมวลผลคือ 0.61 วินาที (แอบปัดให้)

ทีนี้เรามาดูอีกวิธีกันครับ วิธีนี้เป็นการใช้ FileSystemObject (FSO) object model เราไปดูกันครับ


ผลลัพธ์ที่ได้ โฟลเดอร์มีขนาดเท่ากัน แต่เวลาประมวลผลนั้นแค่ 0.007 วินาที ซึ่งใช้เวลาต่างกันประมาณเกือบ 100 เท่า ลองจินตนาการดูว่า ถ้าเราต้องการเช็คโฟลเดอร์ที่มีขนาดใหญ่กว่านี้ จะช่วยประหยัดเวลาเราไปมากขนาดไหน ^__^

...
แล้วเจอกันบทความหน้าครับ

วันเสาร์ที่ 12 ธันวาคม พ.ศ. 2558

กด F5 รัว ๆ ทำเว็บล่มแบบที่เค้าทำกัน สไตล์ Powershell


    มีอยู่ช่วงนึงไม่นานมานี้ได้มีการถล่มเว็บ ๆ หนึ่งโดยการกด F5 รัว ๆ เพื่อให้เว็บมีการเชื่อมต่อจากภายนอกเข้ามาเยอะ ๆ จนเกิดอาการ Over Connection ก็เลยเกิดโจทย์ในหัวว่าถ้าจะใช้ Powershell กดให้ต้องทำอย่างไร เรามาดูวิธีการกันครับ


    ตัวอย่างข้างต้นเป็นการ Activate เบราเซอร์ Firefox ขึ้นมาแล้วทำการกด F5 ครับ ทีนี้ถ้าเราอยากให้กด F5 ทุก ๆ 0.5 วินาที จำนวน 100 ครั้งต้องทำอย่างไร ไปดูกันครับ


    ถ้าบนเบราเซอร์มีหลาย Tab เราสามารถใช้คำสั่งกด Ctrl+Tab ได้ด้วย เหมาะสำหรับการฟลัดเว็บหลาย ๆ เว็บ หรือ เว็บเดียวแบบถี่ ๆ (ให้คิดไว้เสมอว่า การกด F5 ทุก ๆ เสี้ยววิ บน Tab เดียวนั้นไม่เกิดประโยชน์ เพราะเบราเซอร์ยังไม่ทันจะได้เชื่อมต่อเว็บ ก็ถูกรีเซ็ตด้วยการกด F5 ซ้ำไปอีกครั้ง)









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

 ...
แล้วเจอกันบทความหน้าครับ

วันอาทิตย์ที่ 6 ธันวาคม พ.ศ. 2558

Out-GridView คำสั่งที่ง่าย แต่มีประโยชน์


    โดยทั่วไปเราจะรู้จัก Powershell กันในหน้าตาของจอฟ้า ๆ หรือดำ ๆ แต่ความจริงแล้ว Powershell ยังมีคำสั่งที่ใช้แสดง Output ที่เป็น Graphical ด้วย เรามาดูตัวอย่างกันครับ



    เราสามารถทำการ Sort, Filter ได้บนหน้าต่างนี้ รวมไปถึงเลือกค่าให้ออกมาเป็นผลลัพธ์แสดงบนหน้า Console ได้


     เมื่อเราเลือกค่าและคลิก OK ก็จะได้ผลลัพธ์ออกมาแบบนี้


เราสามารถใส่ค่าพารามิเตอร์เพื่อให้เลือกได้หลายค่าได้อีกด้วย


    ก็จะได้ผลลัพธ์ตามนี้ครับ


เราสามารถนำไปประยุกต์ใช้กับค่าอื่น ๆ ได้ด้วย เช่น


    จะเห็นว่า เพียงแค่เราใส่ | Out-GridView ผลลัพธ์ที่ได้ก็จะแสดงผลออกมาเป็นหน้าตาแบบทีเห็น ซึ่งนอกจากจะดูสบายตาแล้ว ยังเหมาะกับผู้ที่ไม่ถนัดใช้ Sort-Object หรือ Filter ด้วย

...
แล้วเจอกันบทความหน้าครับ
 

วันอาทิตย์ที่ 22 พฤศจิกายน พ.ศ. 2558

ข้อความและอักขระพิเศษใน Powershell


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

1. การใช้ single quotes (' ') และ double quotes (" ")


    จากภาพด้านบน คำสั่งแรกเป็นการใช้ single quotes ซึ่งเราจะเห็นว่า backtick กับตัวแปร $env:USERPROFILE นั้นได้แสดงผลตามปกติ คือแสดงข้อความทั้งหมดที่อยู่ในบลอค ส่วนคำสั่งที่ใช้ double quotes พบว่าทั้ง backtick และ $env:USERPROFILE ได้ถูกแสดงผลออกมาต่างกับคำสั่งแรกโดยสิ้นเชิง


2. อักขระพิเศษในข้อความ

    เราสามารถใช้ double quotes ใน single quotes บลอคได้ และในทางกลับกันก็สามารถใช้ single quotes ใน double quotes บลอคได้เช่นกัน


    เราสามารถใช้ single quotes ซ้อนใน single quotes บลอคได้ด้วย และสามารถใช้ double quotes ซ้อนใน double quotes บลอคได้ด้วยเช่นกัน และเรายังสามารถใช้ backtick ได้ใน double quotes แต่ไม่สามารถใช้ได้ใน single quotes นะครับ



    การขึ้นบรรทัดใหม่หรือการ Tab ก็สามารถทำได้ใน double quotes บลอคเช่นเดียวกันครับ



3. ข้อความที่มีหลายบรรทัด

    เราสามารถใช้ backtick แทนการขึ้นบรรทัดใหม่ในหน้า console หรือสคริปที่เราเขียนได้ แต่ในกรณีที่มีหลายบรรทัด เราจะใช้ Here-Strings (@" "@) แทน ซึ่งเราสามารถวางข้อความหรืออักขระพิเศษอะไรก็ได้ในบลอค Here-Strings



 ...

แล้วเจอกันบทความหน้าครับ

วันเสาร์ที่ 21 พฤศจิกายน พ.ศ. 2558

Write clean Powershell code [Part 3]


7. ใช้ `n เพื่อขึ้นบรรทัดใหม่




8. ใช้ [void] หรือ Out-Null แทน Clear-Host เมื่อไม่ต้องการแสดง Output


9. ใช้ -ErrorAction SilentlyContinue เมื่อจำเป็น

    บางครั้งเราทราบอยู่แล้วว่า Error ที่จะเกิดขึ้นนั้นคืออะไร ซึ่ง Error ที่เราเจอกันบ่อย ๆ คือ Permission Denied หรือ Access Denied อย่างเช่นตัวอย่างนี้


     เราสามารถใช้ -ErrorAction SilentlyContinue เพื่อยกเลิกการแสดง Error ที่จะเกิดขึ้นได้



10. ใช้ Join-Path แทนการเอา Path มาบวกกัน