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

วิธีใช้ PowerShell Array - คู่มือฉบับสมบูรณ์


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

ในบทความนี้ เราจะดู PowerShell Array และวิธีใช้ในสคริปต์ PowerShell ของคุณ

อาร์เรย์ PowerShell

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

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

บันทึก

ตรวจสอบให้แน่ใจว่าคุณได้อ่านบทความนี้เกี่ยวกับแฮชเทเบิลและความแตกต่างระหว่างอาร์เรย์และแฮชเทเบิลด้วย

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

การสร้างอาร์เรย์

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

$fruits = 'apple','raspberry','kiwi'

# Result of $fruits:
apple
raspberry
kiwi

การใช้เครื่องหมาย @()

วิธีทั่วไปในการกำหนดหรือสร้างอาร์เรย์คือการใช้สัญลักษณ์ @() หรือที่เรียกว่าตัวดำเนินการนิพจน์ย่อย ซึ่งจะสร้างอาร์เรย์ของเวลาภายในวงเล็บ ( )

ตัวอย่างเช่น หากต้องการสร้างอาร์เรย์ผลไม้:

$fruits = @('apple','raspberry','kiwi')

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

$data = @()

# Result
$data.Count
0

การสร้างอาร์เรย์ PowerShell ด้วยประเภทเฉพาะ

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

$array = @('foo',3,'bar',50,@('apple','kiwi'))

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

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

ตัวอย่างเช่น หากต้องการสร้างอาร์เรย์ที่สามารถมีเฉพาะจำนวนเต็มได้ ให้ทำดังนี้

[int32[]]$ints = 10,50,30,20

ตัวเลือกประเภทข้อมูลอื่นๆ ที่ใช้กันทั่วไปสำหรับอาร์เรย์ ได้แก่:

  • สตริง[] - สร้างอาร์เรย์ของสตริง
  • Int[] - ใช้เพื่อสร้างอาร์เรย์ของจำนวนเต็ม
  • บูลีน[] - อาร์เรย์ของค่าบูลีน (จริงหรือเท็จ)
  • ไบต์[] - ใช้เพื่อสร้างอาร์เรย์ของไบต์
  • Double[] - สร้างอาร์เรย์ของตัวเลขทศนิยมที่มีความแม่นยำสองเท่า
  • ทศนิยม[] - ใช้เพื่อสร้างอาร์เรย์ของตัวเลขทศนิยม
  • DateTime[] - ใช้เพื่อสร้างอาร์เรย์ของวันที่และเวลา
  • วัตถุ[] - สร้างอาร์เรย์ของวัตถุ
  • Char[] - ใช้เพื่อสร้างอาร์เรย์ของอักขระ
  • อาร์เรย์[] - ใช้เพื่อสร้างอาร์เรย์ของอาร์เรย์

คุณสามารถสร้างอาร์เรย์ประเภทอื่นๆ ได้เช่นกัน เช่น ประเภทออบเจ็กต์แบบกำหนดเอง และคลาสเฟรมเวิร์ก .NET เฉพาะ เช่น Diagnostics.Process เป็นต้น

การสร้างอาร์เรย์หลายมิติ

อาร์เรย์หลายมิติคืออาร์เรย์ที่มีอาร์เรย์อื่นเป็นองค์ประกอบ การสร้างอาร์เรย์หลายมิติใน PowerShell ทำได้ง่ายเพียงแค่สร้างอาร์เรย์แล้วเพิ่มอาร์เรย์ย่อยเป็นองค์ประกอบ ตัวอย่างเช่น หากต้องการสร้างอาร์เรย์ 2 มิติ:

# Create an empty 2-dimensional array
$myArray = @()

# Add sub-arrays as elements
$myArray += @(1,2,3),@(4,5,6),@(7,8,9)

นอกจากนี้เรายังสามารถสร้างอาร์เรย์สองมิติด้วยบรรทัดเดียวได้โดยใช้ตัวดำเนินการลูกน้ำ:

$myArray = @( (1,2,3), (4,5,6), (7,8,9) )

ในการเข้าถึงองค์ประกอบในอาเรย์หลายมิติ เราจำเป็นต้องใช้ดัชนีของอาเรย์แรก (พาเรนต์) และอาเรย์ย่อย (ซ้อนกัน):

# Return the third element (2) of the second array (1):
$myArray[1][2]

# Returns
6

การเข้าถึงและการจัดการองค์ประกอบอาร์เรย์

ตอนนี้เรารู้วิธีสร้างอาร์เรย์แล้ว มาดูวิธีเข้าถึงและใช้ข้อมูลภายในอาร์เรย์กันดีกว่า

การเข้าถึงรายการโดยใช้ดัชนีอาร์เรย์

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

$fruits = @("Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Grape", "Honeydew", "Kiwi", "Lemon")

ดังนั้นในการเข้าถึงรายการแรกในอาร์เรย์ Apple เราระบุหมายเลขดัชนี 0:

$fruits[0]

# Result
Apple

นอกจากนี้เรายังสามารถส่งคืนหลายรายการจากอาร์เรย์ได้โดยการป้อนหมายเลขดัชนีหลายรายการ:

$fruits[3,7,8]

# Result
Date
Honeydew
Kiwi

อีกทางเลือกหนึ่งคือการส่งคืนช่วงของรายการจากอาร์เรย์ ตัวอย่างเช่น เราสามารถส่งคืน 5 รายการแรกโดยใช้:

$fruits[0..4]

# Result
Apple
Banana
Cherry
Date
Elderberry

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

$fruits[-1]

# Result
Lemon

$fruits[-1..-3]

#Result
Lemon
Kiwi
Honeydew

วนซ้ำอาร์เรย์ใน PowerShell

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

บันทึก

ตรวจสอบให้แน่ใจว่าคุณได้อ่านบทความเกี่ยวกับ For-Each, Do-While อื่นใน PowerShell ด้วย มันจะอธิบายความแตกต่างและวิธีการที่เร็วที่สุด

มีวิธีการต่างๆ ในการวนซ้ำอาร์เรย์ แต่วิธีที่ง่ายที่สุดคือการไปป์ ForEach-Object cmdlet ที่อยู่ด้านหลังตัวแปร หรือใช้วิธี .ForEach:

$fruits | ForEach-Object {"Fruit: $_"}

# Result
Fruit: Apple
Fruit: Banana
Fruit: Cherry
Fruit: Date
Fruit: Elderberry
Fruit: Fig
Fruit: Grape
Fruit: Honeydew
Fruit: Kiwi
Fruit: Lemon

# Or:
$fruits.ForEach({"Fruit: $_"})

เมื่อคุณต้องการติดตามตำแหน่งที่คุณอยู่ในอาร์เรย์ For loop ถือเป็นวิธีที่ดีที่จะใช้ วิธีนี้จะติดตามหมายเลขดัชนีที่อยู่ในอาร์เรย์:

for ($i = 0; $i -le ($fruits.length - 1); $i += 1) {
  Write-Host "$($fruits[$i]) is located at index $i"
}

เรียงลำดับอาร์เรย์ PowerShell

เราสามารถจัดเรียงองค์ประกอบในอาร์เรย์ได้โดยใช้ Sort-Object cmdlet ซึ่งจะเรียงลำดับองค์ประกอบทั้งหมดในอาร์เรย์ตามค่าของพวกเขา โดยค่าเริ่มต้น ระบบจะจัดเรียงรายการตามลำดับตัวอักษร ตัวอย่างเช่น หากต้องการจัดเรียงผลไม้ที่เราสามารถทำได้:

$sortedFruits = $fruits | Sort-Object

นอกจากนี้เรายังสามารถเรียงลำดับอาร์เรย์จากมากไปน้อยโดยการเพิ่มพารามิเตอร์ -Descending:

$sortedFruits = $fruits | Sort-Object -Descending

# Result
Lemon
Kiwi
Honeydew
Grape
Fig
Elderberry
Date
Cherry
Banana

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

กรองอาร์เรย์ใน PowerShell

เราสามารถใช้ Where-Object cmdlet เพื่อกรองอาร์เรย์ใน PowerShell มันจะส่งคืนเฉพาะรายการที่ตรงกับเงื่อนไขของตัวกรองไปยังอาร์เรย์ใหม่ ตัวอย่างเช่น ลองหาผลไม้ทั้งหมดที่ลงท้ายด้วย "rry":

$filteredFruits = $fruits | Where-Object {$_ -like "*rry"}

# result
Cherry
Elderberry

PowerShell เพิ่มลงในอาร์เรย์

ในการเพิ่มรายการลงในอาร์เรย์ เราจำเป็นต้องใช้ตัวดำเนินการ += นี่จะคัดลอกเนื้อหาของอาร์เรย์และเพิ่มรายการใหม่ลงไป ตัวอย่างเช่น เราสามารถเพิ่มผลไม้ใหม่ให้กับอาร์เรย์ $fruits ได้ดังนี้:

$fruits += "Mango"

หรือเราสามารถเพิ่มหลายรายการลงในอาร์เรย์ได้ดังนี้:

$fruits += "Mango", "Nectarine", "Orange"

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

บางคนพยายามใช้เมธอด .add() เพื่อเพิ่มรายการลงในอาร์เรย์ แต่คุณสามารถใช้วิธีนี้กับ ArrayList เท่านั้น

ลบองค์ประกอบออกจากอาร์เรย์

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

ตัวอย่างเช่น หากต้องการลบ Banana ออกจากอาร์เรย์ $fruits เราจะคัดลอกอาร์เรย์และใช้ Where-Object cmdlet เพื่อกรอง Banana ออก:

$fruits = $fruits | Where-Object {$_ -ne "Banana"}

รายการอาร์เรย์ของ PowerShell

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

ดังนั้นในการสร้าง ArrayList ใน PowerShell เราจะต้องใช้ New-Object cmdlet เพื่อสร้างอาร์เรย์:

$arrayList = New-Object System.Collections.ArrayList

ตอนนี้เราสามารถใช้ .Add() วิธีการเพิ่มรายการใน ArrayList:

$arrayList.Add("Apple")
$arrayList.Add("Banana")

หากต้องการลบรายการออกจาก ArrayList เราสามารถใช้วิธี .Remove():

$arrayList.Remove("Apple")

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

Cmdlets อาร์เรย์ในตัว

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

เข้าร่วมผู้ประกอบการ

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

$fruits -join ','

# Result
Apple,Cherry,Date,Elderberry,Fig,Grape,Honeydew,Kiwi,Lemon

ตัวดำเนินการแยก

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

$fruits = "Apple,Banana,Cherry" -split ','

แทนที่ตัวดำเนินการ

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

ตัวอย่างเช่น หากต้องการแทนที่ Apple ในอาร์เรย์ผลไม้ด้วย Mange เราสามารถทำสิ่งต่อไปนี้:

$fruits = $fruits -replace "Apple","Mango"

โปรดทราบว่าตัวดำเนินการ -replace คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หากคุณต้องการทำให้ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ คุณควรใช้ตัวดำเนินการ -ireplace

ตัวดำเนินการไม่ได้จำกัดอยู่เพียงการแทนที่องค์ประกอบเดียวของอาร์เรย์ นอกจากนี้ยังสามารถแทนที่อักขระเฉพาะในองค์ประกอบทั้งหมดของอาร์เรย์ได้อีกด้วย ตัวอย่างเช่น หากต้องการแทนที่ “e” ด้วย “E”:

$fruits = $fruits -replace "e","E"

# Result
ApplE
ChErry
DatE
EldErbErry
Fig
GrapE
HonEydEw
Kiwi
LEmon

ห่อขึ้น

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

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

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