Go pro: คู่มือผู้ใช้ PowerShell

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

PowerShell เป็นส่วนเสริมที่ยิ่งใหญ่ในกล่องเครื่องมือ Windows และสามารถกระตุ้นความกลัวได้เล็กน้อยเนื่องจากความมหาศาลนั้น มันเป็นภาษาสคริปต์, เชลล์คำสั่ง, แว็กซ์พื้นหรือไม่? คุณต้องเชื่อมโยง cmdlet กับคลาส. Net ที่สร้างอินสแตนซ์เพื่อรันกับผู้ให้บริการหรือไม่? และทำไมเอกสารสนับสนุนทั้งหมดถึงพูดถึงผู้ดูแลระบบ - ฉันต้องเป็นผู้ดูแลระบบ Windows มืออาชีพเพื่อใช้งานได้หรือไม่

ผ่อนคลาย. PowerShell มีประสิทธิภาพ แต่ไม่จำเป็นต้องข่มขู่

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

ขั้นตอนที่ 1: เหวี่ยงขึ้น

สิ่งแรกที่คุณต้องมีคือ PowerShell เอง หากคุณใช้ Windows 10 แสดงว่าคุณมี PowerShell 5 ซึ่งเป็นเวอร์ชันล่าสุดติดตั้งอยู่แล้ว (Win10 Anniversary Update มี 5.1 แต่คุณจะไม่ทราบความแตกต่างกับ 5.0 ของ Fall Update) Windows 8 และ 8.1 มาพร้อมกับ PowerShell 4 ซึ่งดีพอสำหรับการทำให้เท้าเปียก การติดตั้ง PowerShell บน Windows 7 ไม่ใช่เรื่องยาก แต่ต้องใช้ความระมัดระวังเป็นพิเศษและคุณต้องติดตั้ง. Net Framework แยกต่างหาก JuanPablo Jofre ให้รายละเอียดวิธีการติดตั้ง WMF 5.0 (Windows Management Framework) ซึ่งรวมถึง PowerShell นอกเหนือจากเครื่องมือที่คุณไม่น่าจะใช้เมื่อเริ่มต้นบน MSDN

PowerShell มีสองอินเทอร์เฟซ ผู้ใช้ขั้นสูงจะเลือกใช้ GUI เต็มรูปแบบหรือที่เรียกว่า Integrated Scripting Environment (ISE) อย่างไรก็ตามผู้เริ่มต้นใช้งานได้ดีที่สุดโดยคอนโซล PowerShell ซึ่งเป็นอินเทอร์เฟซข้อความที่เรียบง่ายซึ่งชวนให้นึกถึงบรรทัดคำสั่งของ Windows หรือแม้แต่ DOS 3.2

ในการเริ่ม PowerShell ในฐานะผู้ดูแลระบบจาก Windows 10 ให้คลิกเริ่มแล้วเลื่อนรายการแอพลงไปที่ Windows PowerShell คลิกที่บรรทัดนั้นคลิกขวาที่ Windows PowerShell แล้วเลือก Run as Administrator ใน Windows 8.1 ให้มองหา Windows PowerShell ในโฟลเดอร์ Windows System ใน Win7 จะอยู่ในโฟลเดอร์ Accessories คุณสามารถเรียกใช้ PowerShell ในฐานะผู้ใช้ "ปกติ" ได้โดยทำตามลำดับเดียวกัน แต่ด้วยการคลิกซ้าย

ใน Windows ทุกเวอร์ชันคุณสามารถใช้การค้นหาของ Windows เพื่อค้นหา PowerShell ใน Windows 8.1 และ Windows 10 คุณสามารถวางไว้บน Ctrl-X“ เมนู Power” (คลิกขวาที่จุดว่างบนแถบงานแล้วเลือกคุณสมบัติบนแท็บการนำทางให้เลือกช่องเพื่อแทนที่พรอมต์คำสั่ง) เมื่อคุณเปิดแล้วคุณควรตรึง PowerShell ไว้ที่ทาสก์บาร์ของคุณ ใช่คุณจะชอบมันมาก

ขั้นตอนที่ 2: พิมพ์คำสั่ง Windows แบบเก่า

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

ตัวอย่างเช่นcdเปลี่ยนไดเร็กทอรี (aka โฟลเดอร์) และdirยังคงแสดงรายการไฟล์และโฟลเดอร์ทั้งหมดที่รวมอยู่ในโฟลเดอร์ปัจจุบัน

ขึ้นอยู่กับว่าคุณเริ่มคอนโซล PowerShell อย่างไรคุณอาจเริ่มต้นที่c:\Windows\system32หรือที่c:\Users\ก็ได้ ในตัวอย่างภาพหน้าจอฉันใช้cd ..(จดช่องว่าง) เพื่อเลื่อนขึ้นทีละระดับจากนั้นเรียกใช้dirเพื่อแสดงรายการไฟล์และโฟลเดอร์ย่อยทั้งหมดในC:\ไดเรกทอรี

ขั้นตอนที่ 3: ติดตั้งไฟล์วิธีใช้

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

ในการเริ่มทำความเข้าใจกับ PowerShell ให้พิมพ์helpตามด้วยคำสั่งที่คุณรู้จัก help dirยกตัวอย่างเช่นในภาพที่ผมพิมพ์

PowerShell ช่วยเหลือบอกว่าเป็นนามแฝงสำหรับคำสั่งdir PowerShell Get-ChildItemแน่นอนว่าถ้าคุณพิมพ์get-childitemที่PS C:\>พรอมต์คุณจะเห็นสิ่งที่คุณเห็นด้วยdirคำสั่ง

ดังที่ระบุไว้ที่ด้านล่างของภาพหน้าจอไฟล์วิธีใช้สำหรับ PowerShell จะไม่ได้รับการติดตั้งโดยอัตโนมัติ เพื่อดึงพวกเขา (คุณไม่ต้องการที่จะได้รับพวกเขา) เข้าสู่ระบบเพื่อ PowerShell update-helpในโหมดผู้ดูแลระบบแล้วพิมพ์ การติดตั้งไฟล์วิธีใช้จะใช้เวลาหลายนาทีและคุณอาจขาดโมดูลบางส่วน - ความช่วยเหลือสำหรับ NetWNV และ SecureBoot ล้มเหลวในการติดตั้งบนเครื่องทดสอบของฉัน แต่เมื่อคุณทำเสร็จแล้วระบบความช่วยเหลือเต็มรูปแบบจะอยู่ที่การเรียกและโทรของคุณ

จากนั้นให้พิมพ์get-helpตามด้วยคำสั่ง (“ cmdlet” ใน PowerShell speak ออกเสียงว่า“ command-let”) ที่เกี่ยวข้องกับคุณและดูความช่วยเหลือทั้งหมดสำหรับรายการนั้น ตัวอย่างเช่นget-help get-childitemสร้างข้อมูลสรุปของget-childitemตัวเลือก นอกจากนี้ยังแจ้งให้คุณพิมพ์รูปแบบต่างๆในธีม ดังนั้นสิ่งต่อไปนี้:

get-help get-childitem -examples

get-childitemผลิตเจ็ดตัวอย่างรายละเอียดของวิธีการใช้ คำสั่ง PowerShell

get-help get-childitem -detailed

รวมถึงเจ็ดตัวอย่างเหล่านี้ตลอดจนคำอธิบายโดยละเอียดของทุกพารามิเตอร์ที่มีสำหรับget-childitemcmdlet

ขั้นตอนที่ 4: รับความช่วยเหลือเกี่ยวกับพารามิเตอร์

ในhelp dirหน้าจอคุณอาจได้สังเกตเห็นมีสองรายการภายใต้สำหรับSYNTAX get-childitemความจริงที่ว่ามีไวยากรณ์สองแบบแยกกันสำหรับ cmdlet หมายความว่ามีสองวิธีในการเรียกใช้ cmdlet คุณแยกไวยากรณ์ออกจากกันอย่างไรและพารามิเตอร์หมายถึงอะไร? คำตอบนั้นง่ายมากหากคุณรู้เคล็ดลับ

หากต้องการทราบรายละเอียดทั้งหมดเกี่ยวกับพารามิเตอร์สำหรับget-childitemcmdlet หรือ cmdlet อื่น ๆ ให้ใช้-fullพารามิเตอร์ดังนี้:

get-help get-childitem -full

ที่สร้างรายการทีละบรรทัดของสิ่งที่คุณสามารถทำได้กับ cmdlet และสิ่งที่อาจเกิดขึ้น (หรือไม่ก็ได้!) ดูภาพหน้าจอ

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

get-childItem “*.txt” -recurse

ดึงรายการ*.txtไฟล์“” ทั้งหมดในโฟลเดอร์ปัจจุบันและโฟลเดอร์ย่อยทั้งหมด (เนื่องจาก-recurseพารามิเตอร์) ในขณะที่สิ่งต่อไปนี้:

get-childitem “HKLM:\Software”

HKEY_LOCAL_MACHINE\Softwareส่งกลับรายการทั้งหมดของคีย์รีจิสทรีระดับสูงใน

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

ขั้นตอนที่ 5: ตอกชื่อลงไป

ไม่มีเหตุผลว่าทำไม cmdlets ที่เราได้เห็นจนถึงมีลักษณะเดียวกันคือ: get-childitem, update-helpและget-helpทั้งหมดเป็นไปตามการประชุมกริยาคำนามเดียวกัน ด้วยความเมตตา cmdlets ทั้งหมดของ PowerShell ใช้รูปแบบนี้โดยมีคำกริยานำหน้าคำนาม (เอกพจน์) บรรดาผู้ที่ใช้เวลาหลายสัปดาห์ในการดิ้นรนกับคำสั่ง VB และ VBA ที่ชื่อไม่สอดคล้องกันสามารถถอนหายใจด้วยความโล่งอก

หากต้องการดูว่าเรากำลังจะไปที่ไหนลองดู cmdlets ที่พบบ่อยที่สุด (ขอบคุณบล็อก Hey, Scripting Guy! ของ Ed Wilson) เริ่มต้นด้วย cmdlet ที่เข้าถึงในระบบของคุณและดึงข้อมูลที่เป็นประโยชน์ดังต่อไปนี้:

  • set-location: ตั้งค่าตำแหน่งการทำงานปัจจุบันเป็นตำแหน่งที่ระบุ
  • get-content: รับเนื้อหาของไฟล์
  • get-item: รับไฟล์และโฟลเดอร์
  • copy-item: คัดลอกรายการจากที่หนึ่งไปยังอีกที่หนึ่ง
  • remove-item: ลบไฟล์และโฟลเดอร์
  • get-process: รับกระบวนการที่กำลังทำงานบนคอมพิวเตอร์ภายในหรือระยะไกล
  • get-service: รับบริการที่ทำงานบนคอมพิวเตอร์ภายในหรือระยะไกล
  • invoke-webrequest: รับเนื้อหาจากเว็บเพจบนอินเทอร์เน็ต

หากต้องการดูว่า cmdlet เฉพาะทำงานอย่างไรให้ใช้get-helpในรูปแบบ

get-help copy-item -full

จากคำอธิบายความช่วยเหลือคุณสามารถเข้าใจได้ทันทีว่า cmdlet ต้องการอะไร ตัวอย่างเช่นหากคุณต้องการคัดลอกไฟล์และโฟลเดอร์ทั้งหมดจากDocumentsถึงที่c:\tempคุณจะใช้:

copy-item c:\users\[username] \documents\* c:\temp

เมื่อคุณพิมพ์คำสั่งนั้นคุณจะเห็นสัมผัสดีๆบางอย่างที่สร้างขึ้นในสภาพแวดล้อม PowerShell ตัวอย่างเช่นถ้าคุณพิมพ์copy-iและกดแป้น Tab PowerShell จะเติมCopy-Itemและเว้นวรรค หากคุณพิมพ์ cmdlet ผิดและ PowerShell ไม่สามารถเข้าใจได้คุณจะได้รับคำอธิบายอย่างละเอียดว่าเกิดอะไรขึ้น

ลองใช้ cmdlet นี้ (อาจพยายามให้คุณติดตั้งโปรแกรมเพื่ออ่านช่อง“ เกี่ยวกับ” หากเป็นเช่นนั้นให้เพิกเฉย)

invoke-webrequest askwoody.com

คุณจะได้รับรายการประกาศเนื้อหาส่วนหัวรูปภาพลิงก์และอื่น ๆ ของหน้าเว็บอย่างรวบรัด ดูวิธีการทำงาน? โปรดสังเกตในget-helpรายการinvoke-webrequestว่าinvoke-webrequestcmdlet“ ส่งคืนคอลเล็กชันของแบบฟอร์มลิงก์รูปภาพและองค์ประกอบ HTML ที่สำคัญอื่น ๆ ” ซึ่งเป็นสิ่งที่คุณควรเห็นบนหน้าจอ

cmdlet บางตัวช่วยให้คุณควบคุมหรือควาน PowerShell เอง:

  • get-command: แสดงรายการ cmdlet ที่มีทั้งหมด (เป็นรายการยาว!)
  • get-verb: แสดงคำกริยาที่มีทั้งหมด (ครึ่งซ้ายของ cmdlets)
  • clear-host: ล้างการแสดงผลในโปรแกรมโฮสต์

พารามิเตอร์ต่างๆ (โปรดจำไว้get-help) ช่วยให้คุณลดทอนคำสั่งและ จำกัด ตัวเลือกที่อาจเป็นประโยชน์สำหรับคุณ ตัวอย่างเช่นหากต้องการดูรายการ cmdlet ทั้งหมดที่ทำงานกับบริการของ Windows ให้ลองทำดังนี้:

get-command *-service

มันแสดงรายการคำกริยาทั้งหมดที่มีให้serviceเป็นคำนาม นี่คือผลลัพธ์:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

คุณสามารถรวม cmdlet เหล่านี้กับ cmdlet อื่น ๆ เพื่อเจาะลึกลงไปในเกือบทุกส่วนของ PowerShell นั่นคือจุดที่ท่อเข้ามาในภาพ

ขั้นตอนที่ 6: นำท่อเข้า

หากคุณเคยใช้บรรทัดคำสั่งของ Windows หรือใช้งานไฟล์แบตช์คุณจะรู้เกี่ยวกับการเปลี่ยนเส้นทางและไปป์ พูดง่ายๆว่าทั้งการเปลี่ยนเส้นทาง (  >ตัวละคร) และไปป์ ( |ตัวละคร) จะนำเอาผลลัพธ์จากการกระทำและติดไว้ที่อื่น ตัวอย่างเช่นคุณสามารถเปลี่ยนทิศทางผลลัพธ์ของdirคำสั่งไปยังไฟล์ข้อความหรือ "ไพพ์" ผลลัพธ์ของpingคำสั่งลงใน a findเพื่อกรองผลลัพธ์ที่น่าสนใจออกไปเช่น:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

ในคำสั่งที่สองข้างต้นfindลักษณะคำสั่งสำหรับการสตริงpacketsในผลลัพธ์ประปาของ askwoody.com pingและ sticks temp2.txtทุกบรรทัดที่การแข่งขันในไฟล์ที่เรียกว่า

อาจน่าแปลกใจที่คำสั่งแรกเหล่านี้ทำงานได้ดีใน PowerShell ในการรันคำสั่งที่สองคุณต้องการสิ่งนี้:

ping askwoody.com | select-string packets | out-file temp2.txt

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

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

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

จะคิดออกได้อย่างไร? ยินดีต้อนรับสู่get-membercmdlet หากคุณต้องการที่จะรู้ว่าสิ่งที่ประเภทของวัตถุ cmdlet get-memberผลิตท่อมันผ่าน ตัวอย่างเช่นหากคุณกำลังพยายามค้นหากระบวนการที่ทำงานบนคอมพิวเตอร์ของคุณและคุณได้ จำกัด ตัวเลือกให้แคบลงในget-processcmdlet นี่คือวิธีที่คุณจะพบว่าget-processcmdlet สร้างอะไรได้บ้าง:

get-process | get-member

การรันคำสั่งนั้นจะสร้างรายการคุณสมบัติและวิธีการแบบยาวสำหรับget-processแต่ที่จุดเริ่มต้นของรายการคุณจะเห็นประเภทของวัตถุที่get-process สร้าง:

TypeName: System.Diagnostics.Process

ด้านล่างหน้าจอยังบอกคุณว่าget-processมีคุณสมบัติที่เรียกว่าHandles, Name, NPM, PM, SI, และVMWS

หากคุณต้องการจัดการเอาต์พุตget-processเพื่อให้คุณสามารถใช้งานได้ (ซึ่งต่างจากการแสดงรายการกระบวนการที่ใช้งานอยู่บนจอภาพเป็นจำนวนมาก) คุณต้องหา cmdlet อื่นที่จะทำงานร่วมกับSystem.Diagnostics.Processอินพุตได้ หากต้องการค้นหา cmdlet ที่เต็มใจคุณเพียงแค่ใช้ ... รอมัน ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

ที่สร้างรายการ cmdlet ทั้งหมดที่สามารถจัดการSystem.Diagnostics.Processได้

cmdlet บางตัวมีชื่อเสียงในการรับอินพุตเกือบทุกประเภท หัวหน้าหมู่: where-object. บางทีอาจทำให้เกิดความสับสนให้where-objectวนซ้ำแต่ละรายการที่ส่งไปตามท่อทีละรายการและใช้เกณฑ์การคัดเลือกที่คุณร้องขอ $_มีเครื่องหมายพิเศษที่เรียกว่าเป็น ที่ช่วยให้คุณก้าวผ่านแต่ละรายการในท่อทีละรายการ

สมมติว่าคุณต้องการสร้างรายการของกระบวนการทั้งหมดที่ทำงานบนเครื่องของคุณที่เรียกว่า“ svchost” - ใน PowerShell พูดคุณต้องการจับคู่Nameคุณสมบัติของ  svchost. ลองใช้คำสั่ง PowerShell นี้:

get-process | where-object {$_.Name -eq “svchost”}

where-objectcmdlet ลักษณะที่แต่ละSystem.Diagnostics.Processรายการเปรียบเทียบ.Nameของรายการที่จะ“ svchost”; ถ้ารายการตรงกันมันจะคายปลายท่อและพิมพ์ลงบนจอภาพของคุณ ดูภาพหน้าจอ