ค้นหาเว็บไซต์

คำสั่ง Windows PowerShell 5 คำสั่งนี้ดีมาก รู้สึกเหมือนโกง


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

ส่งผลลัพธ์ไปยังหน้าต่างที่สามารถค้นหาได้

มันก็หมายถึงการเข้าถึงอย่างรวดเร็วจริง ๆ

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

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

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

การรันโค้ดบนคอมพิวเตอร์หลายเครื่องพร้อมกัน

ทำงานให้มากขึ้นในเวลาน้อยลง

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

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

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

การหางานที่ผ่านมาโดยใช้ทางลัด

หยุดพิมพ์คำสั่งเดิมซ้ำ

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

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

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

ดูไฟล์อัปเดตขณะที่เกิดขึ้น

ดูการเปลี่ยนแปลงเมื่อมันมาถึง

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

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

คุณสามารถปรับสิ่งนี้ได้โดยการรวม -Wait กับโค้ดอย่าง -Tail ตัวอย่างเช่น ถ้าคุณกำลังดูไฟล์บันทึกขนาดใหญ่ ใช้ -Tail เพื่อแสดงเพียงไม่กี่บรรทัดล่าสุดก่อนที่มันจะเริ่มรอ ซึ่งจะช่วยไม่ให้คอนโซลของคุณแสดงข้อมูลเก่ามากเกินไป หากคุณใช้ -TotalCount เพื่อขอบรรทัดมากกว่าที่ไฟล์มีอยู่ Get-Content จะแสดงเนื้อหาปัจจุบันและรอจนกว่าระบบจะเขียนบรรทัดอื่นลงดิสก์ ซึ่งช่วยสคริปต์ที่ต้องหยุดชั่วคราวจนกว่าจะเกิดเหตุการณ์บันทึกเฉพาะ

การจำกัดรายชื่อเพื่อค้นหารายการเฉพาะ

หานาฬิกาในกองฟาง






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

คำสั่ง Where-Object เปรียบเสมือนยามเฝ้าประตูใน pipeline ที่ตรวจสอบวัตถุแต่ละตัวและอนุญาตให้เฉพาะวัตถุที่ตรงตามเกณฑ์ของคุณผ่านไปยังคำสั่งถัดไป PowerShell ช่วยให้คุณตั้งกฎเหล่านี้ได้ด้วยไวยากรณ์ที่ง่ายขึ้นซึ่งอ่านเหมือนภาษาธรรมชาติ ซึ่งทำให้ง่ายต่อการทำการจับคู่อย่างรวดเร็ว เช่น การตรวจสอบว่าสถานะของบริการเท่ากับสถานะที่กำหนดหรือไม่

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


เก็บคำสั่งเหล่านี้ไว้ใกล้มือสำหรับอนาคต

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

บทความที่เกี่ยวข้อง