การใช้ PowerShell สำหรับผู้ใช้ตามบ้าน - คู่มือสำหรับผู้เริ่มต้นใช้งาน

ใครบ้างที่ไม่หวังว่าพวกเขาจะเป็นพ่อมดและพูดคำสองสามคำเพื่อให้สิ่งมหัศจรรย์เกิดขึ้นได้? เราไม่สามารถแสดงให้คุณเห็นถึงวิธีการเป็นพ่อมดได้ แต่เราสามารถแสดงให้คุณเห็นถึงวิธีการสร้างเวทย์ มนตร์(Well)คอมพิวเตอร์

หากคุณมีคอมพิวเตอร์Windows ที่มี (Windows)Windows 7 แสดงว่า คุณมีPowerShell นอกจากนี้ หากคุณมีคอมพิวเตอร์ที่ใช้Windows 7โปรดอัปเดตเพื่อความปลอดภัย

แต่บทความนี้ไม่ได้มีไว้สำหรับ ผู้ ใช้ Windows(Windows)เท่านั้น PowerShellเวอร์ชันล่าสุดใช้งานได้ฟรี และสามารถติดตั้งและใช้งานบนคอมพิวเตอร์ Mac และLinux

นั่นเป็นสิ่งสำคัญ เพราะสิ่งที่คุณเรียนรู้เกี่ยวกับPowerShellสามารถใช้ได้กับคอมพิวเตอร์เกือบทุกเครื่องในขณะนี้ ใครจะรู้? คุณอาจนำทักษะนี้ไปสู่อีกระดับและก้าวไปสู่อาชีพด้านเทคโนโลยีสารสนเทศ(Information Technology)

PowerShell คืออะไร?

คำตอบที่มีเทคโนโลยีสูงจากMicrosoftคือเป็นเชลล์บรรทัดคำสั่งที่ออกแบบมาโดยเฉพาะสำหรับผู้ดูแลระบบ € ฟัง(” Sounds)ดูน่ากลัว แต่มันไม่ใช่ คุณดูแลคอมพิวเตอร์ของคุณหรือไม่? ใช่ คุณเป็นผู้ดูแลระบบในบ้านของคุณ

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

PowerShellเป็นเหมือนภาษาโปรแกรม แต่ไม่คลุมเครือเหมือนส่วนใหญ่ มันอ่านได้มากเหมือนภาษาอังกฤษ(English) ทั่วไป ซึ่งเป็นสิ่งที่Microsoftพยายามหาเพื่อให้ผู้ที่ไม่ใช่โปรแกรมเมอร์สามารถหยิบขึ้นมาได้

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

คุณสามารถทำอะไรกับ PowerShell ได้บ้าง?

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

ดำเนินการด้วยตนเองด้วยการคลิกและพิมพ์ กระบวนการนี้อาจใช้เวลา 5 นาทีถึงหนึ่งชั่วโมงหรือมากกว่านั้น ด้วยสคริปต์ที่ถูกต้องผู้ดูแลระบบ(Systems Administrator)อาจไม่ต้องทำส่วนใดๆ ของสิ่งนั้นด้วยซ้ำ

แต่คุณต้องการทราบว่าคุณสามารถทำอะไรกับPowerShellที่บ้านได้บ้าง แทบทุกอย่างที่คุณไม่ชอบทำครั้งแล้วครั้งเล่า ใช้เพื่อเพิ่มพื้นที่ว่างในฮาร์ดไดรฟ์ของคุณโดยการลบไฟล์ชั่วคราวและไฟล์บันทึกที่คุณไม่ต้องการ

กำหนดเคอร์ฟิวบนคอมพิวเตอร์ของลูกคุณ เปลี่ยนชื่อ(Rename)หรือจัดระเบียบไฟล์จำนวนมาก นั่นคือความงามของPowerShell เกือบ(Almost)ทุกอย่างที่คุณสามารถทำได้บนคอมพิวเตอร์ของคุณ คุณสามารถสร้างสคริปต์PowerShell เพื่อทำให้เป็นอัตโนมัติและทำงานด้วยการคลิกหรือตามกำหนดเวลา(PowerShell)

ฉันจะใช้ PowerShell ได้อย่างไร

วิธีที่ง่ายที่สุดในการทำงานกับPowerShellอยู่ในPowerShell Integrated Scripting Environment (ISE ) คุณสามารถค้นหาได้โดยคลิกที่Startและพิมพ์powershell iseลงในแถบค้นหาในWindows(Windows 10) 10 คุณควรเห็นตามที่แสดงด้านล่าง

เป็นครั้งแรกที่เราใช้งาน เราจะเรียกใช้ในฐานะผู้ดูแล(Administrator)ระบบ ในการดำเนินการนี้ คุณต้องมีสิทธิ์ของผู้ดูแลระบบบนคอมพิวเตอร์ของคุณก่อน ในStart Menu ของคุณ ให้คลิกขวาที่PowerShell ISEจากนั้นคลิกที่Run as Administrator(Run as Administrator)

คุณอาจได้รับ ป๊อปอัปคำเตือน User Access Control ( UAC ) ที่ถามว่าคุณแน่ใจหรือไม่ว่าต้องการทำเช่นนี้ คลิกใช่(Yes) _

ตอน นี้คุณกำลังดูPowerShell IDE บานหน้าต่างด้านบนของหน้าต่าง(1)คือบานหน้าต่างการเขียนสคริปต์ นี่คือที่ที่คุณจะเขียนสคริปต์ของคุณ บานหน้าต่างด้านล่างของหน้าต่าง(2)คือพื้นที่คอนโซล เมื่อคุณทดสอบสคริปต์ คุณจะเห็นผลลัพธ์ในบานหน้าต่างนี้

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

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

ในหน้าต่างสคริปต์ ให้คัดลอกและวางข้อมูลต่อไปนี้:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

ส่วนSet-ExecutionPolicyเรียกว่า cmdlet (คำสั่งที่ออกเสียง) Cmdlets เป็นสิ่งที่ทรงพลัง คิดว่า(Think)เป็นคำสั่งสั้น ๆ ที่คุณสามารถให้Windowsได้ และWindowsจะทำสิ่งที่ซับซ้อนมากขึ้นเพื่อตอบสนองคำสั่งของคุณ

การเปรียบเทียบจะบอกลูกของคุณให้ทำความสะอาดห้อง สั้น(Short)และตรงประเด็น หากลูกของคุณเชี่ยวชาญในการทำความสะอาดห้อง พวกเขาจะไปจัดเตียง เอาเสื้อผ้าใส่ตะกร้า ชั้นวางของเล่นและหนังสือ และอาจถึงกับดูดฝุ่นพื้นด้วย พวกเขาเข้าใจว่า cmdlet Clean-YourRoomหมายถึงทั้งหมดนั้น

ที่ด้านบนของหน้าต่าง คุณจะเห็นหัวลูกศรสีเขียว คลิก(Click)เพื่อเรียกใช้คำสั่ง

ส่วน-ExecutionPolicyกำลังบอกSet-ExecutionPolicyว่าจะตั้งค่านโยบายใด เป็นพารามิเตอร์ มันกำลังพูดว่า “ฉันต้องการให้คุณทำงานภายใต้แนวทางปฏิบัติเหล่านี้และทำสิ่งนี้โดยเฉพาะ มันบอกให้ใช้นโยบายเฉพาะของRemoteSigned

นโยบายRemoteSignedระบุว่าPowerShellไม่สามารถดำเนินการหรือเรียกใช้สคริปต์ใดๆ ที่ดาวน์โหลดจากอินเทอร์เน็ต(Internet)เว้นแต่จะมีการลงนามโดยผู้เผยแพร่ที่เชื่อถือได้

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

มาดูสคริปต์การลบไฟล์ชั่วคราวกัน มันไม่ได้มีประสิทธิภาพหรือละเอียดเท่าCCleanerแต่CCleanerมาพร้อมกับปัญหาชุดหนึ่ง

ใช้ PowerShell(Use PowerShell)เพื่อสร้างพื้นที่(Create Space)บนฮาร์ดไดรฟ์ของคุณ(Your Hard Drive)

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

$TempFileLocation = "C:\Users\username\Appdata\Local\Temp\*"

อะไรก็ตามที่มีเครื่องหมายดอลลาร์อยู่ข้างหน้าจะเป็นชื่อตัวแปร คิดว่ามันเหมือนกระเป๋าเงินสำหรับใส่ของมีค่าไว้Walletเตือนเราถึงเครื่องหมายดอลลาร์ ของมีค่าดูเหมือนจะแปรผัน ดังนั้นเราจะจำมันไว้เช่นกัน เรากำลังสร้างกระเป๋าเงินหรือตัวแปรชื่อ$ $TempFileLocationเครื่องหมายเท่ากับบอกPowerShellว่าต้องใส่อะไรในตัวแปรนั้น

ในกรณีนี้ เรากำลังวางตำแหน่งของไฟล์ชั่วคราวของ Windows ตำแหน่ง – C:\Users\username\AppData\Local\Temp\* * เรากำลังทำเช่นนี้ด้วยเหตุผลสองประการ เป็นตำแหน่งที่ปลอดภัยเสมอในการลบไฟล์ และเราจะใช้มันเพื่อบอกPowerShellว่าจะต้องไปที่ใดเพื่อลบไฟล์

ในที่ที่มีชื่อผู้ใช้อยู่ในตำแหน่งนั้น ให้เปลี่ยนเป็นชื่อผู้ใช้ของคุณ นั่นคือชื่อผู้ใช้ที่คุณใช้เพื่อเข้าสู่ระบบคอมพิวเตอร์ของคุณ เครื่องหมายดอกจัน (*) ที่ส่วนท้ายของมันคือไวด์การ์ด ความหมายคือทุกอย่างในโฟลเดอร์Tempเพราะทุกอย่างใน โฟลเดอร์ Tempเป็นแบบชั่วคราวและเราต้องการลบทิ้ง

เครื่องหมายคำพูดคู่รอบสถานที่ก็มีความสำคัญเช่นกัน นั่นบอกPowerShellว่ามีอะไรอยู่ในนั้นคือสตริง คิดว่า(Think)สตริงเป็นสตริงของตัวอักษรและอักขระ ถ้าเป็นตัวเลขธรรมดาเราจะไม่ใช้เครื่องหมายคำพูด

$TempFile = Get-ChildItem $TempFileLocation -Recurse

เรากำลังสร้างตัวแปรอื่น ครั้งนี้เราจะใช้คำสั่งเพื่อสร้างตัวแปร $TempFile

Get-ChildItem 

อีกสิ่งหนึ่งที่คุณจะสังเกตเห็นเกี่ยวกับ cmdlets เช่นGet-ChildItemก็คือสามารถอ่านได้ทั้งหมด ดูว่าคำแรกเป็นกริยาอย่างไร? Cmdletsทั้งหมดเริ่มต้นด้วยคำแสดงการกระทำ คุณจึงรู้ได้ทันทีว่ากำลังทำอะไรอยู่ ChildItemเป็นคำนามสองคำ

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

cmdlet รับไอเท็มย่อยคืออะไร? ทุก อย่างในตัวแปร$TempFileLocationPowerShellจะไปที่ตำแหน่งที่เราใส่ไว้ใน $ TempFileLocationก่อนหน้านี้ และรับไอเท็มย่อยทั้งหมดที่มีอยู่ จากนั้นจะใส่ลงในตัวแปร$ $TempFile

แล้ว ส่วน -Recurseคืออะไร? นั่นคือ การบอก ให้ Get-ChildItemดำเนินการทุกอย่างในสถานที่นั้น อย่าเพิ่งไปรับไฟล์ในโฟลเดอร์หลักทันที หากมีโฟลเดอร์ในโฟลเดอร์นั้น ให้นำโฟลเดอร์ย่อยทั้งหมดไปด้วย รวมถึงโฟลเดอร์ย่อย และอื่นๆ เราจะไปหามาทั้งหมด

$TempFileCount = ($TempFile).count

ใช่ เรากำลังสร้างตัวแปรตัวที่สามชื่อ$TempFileCountและเราจะใส่ตัวเลขลงในตัวแปรนั้น เบอร์ไหน? ทีนี้ ( $TempFile).countจะได้ตัวเลขนั้นมา คุณอาจคิดออกแล้วว่า ส่วน .countจะทำการนับไฟล์ทั้งหมดที่เราเพิ่งจัดเก็บไว้ใน$ TempFile

ทำไมเราถึงทำเช่นนี้? ส่วนใหญ่เป็นเพราะมันดีที่รู้ว่าเราทำความสะอาดไฟล์ที่ไม่มีประโยชน์กี่ไฟล์ด้วยสคริปต์ที่เหลือ เพื่อให้เราสามารถบอกได้ว่าไฟล์นั้นมีประสิทธิภาพเพียงใด

if($TempFileCount -eq 0)

ตอนนี้เรากำลังตั้งค่าคำสั่งแบบมีเงื่อนไข คุณจะเห็นว่ามันกำลังถามว่า “ถ้า” ถ้าอะไร? หากสิ่งที่อยู่ในวงเล็บเป็นจริงหรือเท็จ วงเล็บมีความสำคัญ มิฉะนั้น If ไม่รู้ว่าจะเปรียบเทียบอะไร ในที่นี้ จะถามว่าหมายเลขที่เราเก็บไว้ใน$TempFileCountมีค่าเท่ากับศูนย์หรือไม่

-eq เป็น(-eq)ชวเลขสำหรับเท่ากับ เป็นประเภทของตัวดำเนินการเปรียบเทียบ มันเหมือนกับบอกลูกๆ ของคุณว่า “ถ้าห้องของคุณสะอาด เยี่ยม เรากำลังจะทำอะไรบางอย่าง” ประโยคนี้บอกว่าถ้าตัวเลขที่เก็บไว้ใน $ TempFileCountมีค่าเท่ากับศูนย์หรือไม่ สิ่งต่อไป

{Write-Host "There are no files in the folder $TempFileLocation" -ForegroundColor Green}

นั่นคือสิ่งที่จะเกิดขึ้นถ้า$TempFileCountเป็นศูนย์ วงเล็บปีกกามีความสำคัญ พวกเขาบอกPowerShellให้ทำเฉพาะสิ่งที่อยู่ภายในนั้นหาก $ TempFileCountเท่ากับศูนย์

มันจะเขียนไปยังโฮสต์หรือหน้าจอว่า “ไม่มีไฟล์ในโฟลเดอร์ C:\Users\username\Appdata\Local\Temp\*†พารามิเตอร์ในตอนท้าย – ForegroundColorบอกให้PowerShellทำให้ข้อความเป็นสีเขียว นั่นทำให้ง่ายต่อการแยกแยะจากข้อความแสดงข้อผิดพลาดซึ่งปกติแล้วจะเป็นสีแดง

Else

คุณรู้ความหมายอื่น นี่คือ “ห้องของคุณดีกว่าสะอาดหรืออย่างอื่น” เป็นส่วนหนึ่งของการตรวจสอบว่าลูกของคุณทำความสะอาดห้องหรือไม่ สิ่งที่จะเกิดขึ้นถ้า$TempFileCountไม่ใช่ศูนย์

{$TempFile | Remove-Item -WhatIf -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue}

สิ่งนี้บอกว่าไปที่ตำแหน่งปัจจุบันที่เก็บไว้ใน$ $TempFileเส้นแนวตั้งหลังจากที่เรียกว่าท่อ มันทำหน้าที่เหมือนไปป์ในชีวิตจริงเพราะมันบอกให้PowerShellกรองเนื้อหาของ $ TempFileลงใน cmdlet ราวกับว่ามันเป็นน้ำที่ไหลเข้าเครื่องซักผ้า จากนั้น cmdlet Remove-Itemทำในสิ่งที่พูด มันเอาสิ่งที่อยู่ในสถานที่นั้นออก

พารามิเตอร์ -WhatIf( -WhatIf ) มี ความสำคัญมากในขั้นตอนนี้ มันบอกให้PowerShellรันคำสั่ง แต่ให้ลองเท่านั้น อย่าลบอะไรเลย แค่(Just)แสดงให้เราเห็นว่าจะเกิดอะไรขึ้นถ้าเราทำสิ่งนี้จริงๆ

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

พารามิเตอร์-Confirm:$falseหยุดสคริปต์จากการถามว่าคุณต้องการลบไฟล์จริงๆ หรือไม่ คุณรู้ว่าสิ่งที่-Recurseทำอะไร -Forceหมายถึงการลบสิ่งนั้นไม่ว่าอะไรจะเกิดขึ้น -WarningActionถูกตั้งค่าเป็นSilentlyContinue

ซึ่งจะป้องกันไม่ให้สคริปต์แจ้งเตือนคุณเกี่ยวกับสิ่งที่คุณกำลังลบ -ErrorActionถูกตั้งค่าเป็นSilentlyContinueดังนั้นหากมีข้อผิดพลาดใด ๆ ในกระบวนการ มันก็จะทำงานต่อไป

ตอนนี้เราอยู่ที่บรรทัดสุดท้าย

Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green}

เช่นเดียวกับที่ Write-Host(Write-Host)ทำในครั้งแรก มันจะออกมาเป็นประโยคต่อไปนี้ ดังนั้นเราจึงรู้ว่าเกิดอะไรขึ้น โดยจะบอกเราว่าไฟล์จำนวนเท่าใดที่ถูกลบออกจากโฟลเดอร์ที่เพิ่งดำเนินการ และทำเป็นสีเขียวเพื่อให้มองเห็นได้ง่าย

ลองดูที่สคริปต์ทั้งหมด:

$TempFileLocation = "C:\Users\guymcd\Appdata\Local\Temp\*"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).count

if($TempFileCount -eq "0") {
Write-Host "There are no files in the folder $TempFileLocation" - ForegroundColor Green
}
Else {
$TempFile | Remove-Item -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green
}

คุณสามารถคัดลอกและวางสิ่งนี้ลงในPowerShell ISE ของคุณ และบันทึกเป็นสิ่งที่ต้องการdelete -TemporaryFiles.ps1 (delete-TemporaryFiles.ps1)คุณอาจยึดติดกับหลักการตั้งชื่อของ cmdlets เมื่อคุณเข้าใจแล้ว

หากโค้ดใช้ไม่ได้สำหรับคุณด้วยเหตุผลบางประการ คุณยังสามารถดาวน์โหลดสคริปต์ PowerShell ที่เราสร้างและเรียกใช้ได้ เพียง(Just)คลายซิปก่อนเพื่อดูไฟล์สคริปต์

เมื่อใดก็ตามที่คุณต้องการเรียกใช้สคริปต์นี้ เพียงคลิกขวาที่สคริปต์แล้วเลือกRun with PowerShell (Run with PowerShell)คอนโซล PowerShell(PowerShell) จะปรากฏขึ้นชั่วขณะ หนึ่งหรือสองวินาที ในขณะที่สคริปต์ของคุณดำเนินการตามนั้น จากนั้นจะหายไปหากไม่มีข้อผิดพลาด

ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับ PowerShell ได้ที่ไหน

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

มีแหล่งข้อมูลมากมายบนอินเทอร์เน็ต(Internet)สำหรับการเรียนรู้เพิ่มเติมเกี่ยวกับPowerShell จุดเริ่มต้นที่ดีคือบทความของเรา “ สร้างรายการโปรแกรมเริ่มต้นผ่าน Command Line หรือ PowerShell(Generate a List of Startup Programs via Command Line or PowerShell) ” จากนั้นตรวจสอบแหล่งข้อมูลอื่นๆ เหล่านี้:



About the author

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



Related posts