Skip to content

ข้อมูลเบื้องต้นเกี่ยวกับ PowerShell: การเขียนโปรแกรมด้วยลูป

    1651882981

    ในบทช่วยสอน PowerShell นี้ เราจะแสดงให้คุณเห็นถึงวิธีใช้ For loop, ForEach-Object loop และ while, Do-While และ Do-Until loops

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

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

    ForEach-Object Loop

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

    พารามิเตอร์เหล่านี้สามารถระบุได้ด้วยชื่อพารามิเตอร์ -InputObject และ -Process หรือโดยการไพพ์อ็อบเจ็กต์ไปที่ cmdlet ForEach-Object และวางบล็อกสคริปต์เป็นพารามิเตอร์แรก เพื่อแสดงไวยากรณ์พื้นฐานนี้ ตัวอย่างต่อไปนี้แสดงสองวิธีของการใช้ ForEach-Object เพื่อวนซ้ำเนื้อหาในโฟลเดอร์ Documents ของผู้ใช้:

    $myDocuments = รับ-ChildItem $env:USERPROFILEDocuments – ไฟล์ $myDocuments | $myDocuments ForEach-Object {$_.FullName} ForEach-Object -InputObject $myDocuments -Process {$_.FullName} สำหรับแต่ละวัตถุ

    ในบางสถานการณ์ อาจเป็นประโยชน์ในการดำเนินการอย่างน้อยหนึ่งอย่างก่อนหรือหลังการวนซ้ำ พารามิเตอร์ -Begin และ -End สามารถใช้เพื่อกำหนดบล็อกสคริปต์เพื่อดำเนินการก่อนหรือหลังเนื้อหาของบล็อกสคริปต์ -Process สามารถใช้เพื่อตั้งค่าหรือแก้ไขตัวแปรก่อนหรือหลังการดำเนินการวนซ้ำ

    ForEach-Object มีนามแฝงสองนามคือ ForEach และ % และยังรองรับไวยากรณ์ชวเลขที่เริ่มต้นใน PowerShell 3.0 ตัวอย่างสามตัวอย่างต่อไปนี้มีฟังก์ชันเหมือนกัน

    รับ WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace} รับ-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace} รับ-WMIObject Win32_LogicalDisk | % ที่ว่าง

    PowerShell สำหรับลูป

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

    ตัวอย่างต่อไปนี้แสดง For loop พื้นฐานที่ใช้สร้างตารางสูตรคูณ:

    สำหรับ ($i=0; $i -le 10; $i++) { “10 * $i = ” + (10 * $i) }

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

    $colors = @(“Red”,”Orange”,”Yellow”,”Green”,”Blue”,”Indigo”,”Violet”) สำหรับ ($i=0; $i -lt $colors.Length; $ i++) { $สี[$i] }

    ขณะ ทำในขณะ และทำจนกว่าจะวนซ้ำ

    การวนซ้ำประเภทที่สามที่ PowerShell สนับสนุนเกี่ยวข้องกับการตั้งค่าเงื่อนไขที่อนุญาตให้ลูปดำเนินการได้ตราบเท่าที่เงื่อนไขเป็นจริงหรือจนกว่าจะตรงตามเงื่อนไข ทั้งลูป while และ Do-While ใช้เพื่อดำเนินการในขณะที่เงื่อนไขประเมินเป็น $true และแตกต่างกันในไวยากรณ์เท่านั้น Do-Until loops มีไวยากรณ์คล้ายกับ Do-While แต่หยุดการประมวลผลเมื่อตรงตามเงื่อนไขคำสั่ง

    ลูป Do-While และ Do-Until เริ่มต้นด้วยคีย์เวิร์ด Do ที่นำหน้าบล็อกสคริปต์ ตามด้วยคีย์เวิร์ดเงื่อนไข (While หรือ Until) และเงื่อนไข ตัวอย่างเช่น สองลูปต่อไปนี้ทำงานเหมือนกัน เฉพาะเงื่อนไขเท่านั้นที่กลับรายการ:

    $i=1 ทำ { $i $i++ } ในขณะที่ ($i -le 10)$i=1 ทำ { $i $i++ } จนถึง ($i -gt 10)

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

    $i=1 ในขณะที่ ($i -le 10) { $i $i++ }

    ลูปประเภทใดก็ได้จากทั้งหมด 3 ประเภท ได้แก่ ลูป Do-While, Do-Until และ While สามารถใช้เพื่อวนซ้ำได้อย่างไม่มีกำหนด while และ Do-While วนซ้ำโดยตั้งค่าเงื่อนไขเป็น $true และ Do-Until โดยตั้งเงื่อนไขเป็น $false

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

    $i=1 ในขณะที่ ($จริง) { $i $i++ ถ้า ($i -gt 10) { แตก } }

    ที่เกี่ยวข้อง:

    ตัวดำเนินการเปรียบเทียบ PowerShell และลอจิกแบบมีเงื่อนไข
    PowerShell: การใช้ตัวแปร อาร์เรย์ และ Hashtables
    ข้อมูลเบื้องต้นเกี่ยวกับ PowerShell: การจัดการไฟล์และโฟลเดอร์

    0 0 votes
    Rating post
    Subscribe
    Notify of
    guest
    0 comments
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x
    ()
    x