ตารางแฮช PowerShell
Hashtable ใน PowerShell เป็นโครงสร้างข้อมูลที่เก็บคู่คีย์-ค่าไว้ในตารางแฮช คีย์และค่าในแฮชเทเบิลของ PowerShell สามารถมีสตริง จำนวนเต็ม หรือข้อมูลประเภทออบเจ็กต์ใดๆ ได้
Hashtable คล้ายกับอาร์เรย์ แต่ข้อมูลจะถูกจัดเก็บเป็นคู่คีย์-ค่า และอนุญาตให้เข้าถึงค่าโดยใช้คีย์ คีย์คือตัวระบุที่ไม่ซ้ำกันและค่าคือข้อมูลที่เกี่ยวข้องกับคีย์
ในบทความนี้ เราจะพูดถึงตารางแฮชใน PowerShell และวิธีใช้ PowerShell HashTables
วิธีสร้าง Hashtable ใน PowerShell
Hashtable ใน PowerShell สามารถสร้างขึ้นได้โดยใช้วิธีต่างๆ
ใช้เครื่องหมาย @{} เพื่อสร้างตารางแฮช
สามารถประกาศแฮชของ PowerShell ได้โดยใช้สัญลักษณ์ @{}
ไวยากรณ์
$stage1Server = @{}มาสร้างแฮชเทเบิลใน PowerShell ที่เก็บการกำหนดค่าเซิร์ฟเวอร์สำหรับโปรเจ็กต์ที่กำหนดกัน
$stage1Server = @{
"Server" = "IT-101"
"Port" = "80"
"Username" = "admin"
"DBServer" = "DB-CORP1"
"DBUser" = "dbadmin"
"DbTimeOut" = 120
}ผลลัพธ์ของ PowerShell ข้างต้นเพื่อสร้าง hashtable ใน PowerShell คือ:
ใช้ New-Object cmdlet เพื่อสร้าง hashtable
เมื่อใช้ PowerShell New-Object cmdlet คุณสามารถสร้างแฮชเทเบิลได้ New-Object cmdlet จะสร้างอินสแตนซ์ใหม่ของคลาส System.Collections.Hashtable เพื่อสร้าง hashtable
$ServerConfig = New-Object -TypeName System.Collections.Hashtable การใช้แอตทริบิวต์ [สั่งซื้อ] เพื่อสร้างแฮชเทเบิล
คุณสามารถใช้แอตทริบิวต์ [สั่งซื้อ] เพื่อสร้างแฮชเทเบิลใน PowerShell ได้ โดยคีย์ในพจนานุกรมที่เรียงลำดับจะปรากฏตามลำดับเสมอ
แอตทริบิวต์ [สั่ง] สร้างอินสแตนซ์ของคลาส System.Collections.OrderedDictionary
$serverConfig = [ordered]@{
"Server" = "DB-102"
"User" = "admin"
"Password" = "secret"
}คุณสมบัติและวิธีการแฮชเทเบิล
Hashtable ใน PowerShell มีคุณสมบัติและวิธีการหลายประการในการดำเนินการ
PowerShell มี รับสมาชิก cmdlet ที่ได้รับคุณสมบัติและวิธีการสำหรับวัตถุ
# Declare hashtable
$serverConfig = @{}
# Get the properties and methods for hashtable object
$serverConfig | Get-Memberผลลัพธ์ของสคริปต์ PowerShell ข้างต้นเพื่อรับคุณสมบัติและวิธีการที่พร้อมใช้งานสำหรับวัตถุตารางแฮชคือ:
การเพิ่มรายการลงใน Hashtable ใน PowerShell
วัตถุแฮชของ PowerShell มีวิธีเพิ่มที่ใช้เพื่อเพิ่มคู่คีย์-ค่าเป็นองค์ประกอบในแฮชเทเบิล
# Create hashtable
$serverConfig = @{}
# Add value to hashtable
$serverConfig.Add('Server','DB-102')
$serverConfig.Add('Subnet','255.255.255.0')
# Display the Hashtable
$serverConfig ในสคริปต์ PowerShell ข้างต้น เราได้สร้าง $serverConfig แบบแฮชได้ การใช้วัตถุแฮช Add() วิธีการเพิ่มคู่คีย์-ค่า
$serverConfig hashtable เก็บคู่คีย์-ค่าของข้อมูล
ผลลัพธ์ของแฮชเทเบิ้ล $serverConfig ข้างต้นคือ:
# Create hashtable
$serverConfig = @{}
# Add value to hashtable
$serverConfig.Add('Server','DB-102')
$serverConfig.Add('Subnet','255.255.255.0')
# Display the Hashtable
$serverConfig
Name Value
---- -----
Server DB-102
Subnet 255.255.255.0แฮช $serverConfig มีข้อมูลคู่คีย์-ค่าของข้อมูลประเภทต่างๆ เช่น สตริงและตัวอักษรและตัวเลข
PowerShell เป็นอีกวิธีหนึ่งในการเพิ่มคู่คีย์-ค่าทั้งหมดลงใน Hashtable แทนที่จะเพิ่มทีละคู่
# Add the key-value pairs to hashtable all at once
$stage1Server = @{
"Server" = "IT-101"
"Port" = "80"
"Username" = "admin"
"DBServer" = "DB-CORP1"
"DBUser" = "dbadmin"
"DbTimeOut" = 120
}ในสคริปต์ PowerShell ข้างต้น แฮชเทเบิล $stage1Server ถูกสร้างขึ้นโดยใช้รูปแบบ @{} และคู่คีย์-ค่าทั้งหมดจะถูกเพิ่มพร้อมกัน เครื่องหมายเท่ากับ (=) ใช้เพื่อแยกคีย์ออกจากค่า
ผลลัพธ์ของ hashtable ข้างต้นคือ:
PS D:\> $stage1Server
Name Value
---- -----
Port 80
DbTimeOut 120
Server IT-101
DBServer DB-CORP1
Username admin
DBUser dbadminเข้าถึงรายการจาก Hashtable
PowerShell มีหลายวิธีในการเข้าถึงรายการในแฮชเทเบิล
ใช้เครื่องหมาย วงเล็บเหลี่ยม [] เพื่อดึงข้อมูลรายการจาก hashtable คุณจะต้องระบุคีย์เฉพาะเพื่อเข้าถึงค่าหรือข้อมูลที่เกี่ยวข้องกับคีย์นั้น
ลองพิจารณาแฮชเทเบิล $stage1Server ที่สร้างขึ้นข้างต้น และใช้ [] (วงเล็บเหลี่ยม) เพื่อเข้าถึงรายการ
$stage1Server["Server"]ในสคริปต์ PowerShell ข้างต้น ออบเจ็กต์ $stage1Server แบบแฮชได้ใช้ [] เพื่อเข้าถึงค่าที่เกี่ยวข้องกับคีย์เฉพาะ 'เซิร์ฟเวอร์'
ผลลัพธ์ของสคริปต์ด้านบนจะส่งกลับค่าเซิร์ฟเวอร์จากตารางแฮชใน PowerShell
PS D:\> $stage1Server["Server"] IT-101อีกวิธีหนึ่งในการรับองค์ประกอบในแฮชเทเบิลคือการใช้คุณสมบัติที่กำหนดพารามิเตอร์ของรายการซึ่งรับคีย์เฉพาะเป็นอินพุตและดึงค่าที่เกี่ยวข้องกับคีย์
PS D:\> $stage1Server.Item("UserName") admin
PS D:\> คุณสามารถเข้าถึงรายการในแฮชเทเบิลได้โดยใช้คีย์ ในสคริปต์ PowerShell ต่อไปนี้ หากต้องการรับหมายเลขพอร์ต ให้ใช้ออบเจ็กต์ hashtable พร้อมคีย์
PS D:\> $stage1Server.Port 80
PS D:\> วนซ้ำตารางแฮชใน PowerShell
PowerShell มีหลายวิธีในการวนซ้ำผ่าน hashtable เพื่อเข้าถึงองค์ประกอบ hashtable
การใช้ Foreach เพื่อวนซ้ำผ่าน hashtable
Powershell มีคำสั่ง foreach เพื่อวนซ้ำในคอลเลกชันของรายการ คุณสามารถใช้ foreach เพื่อสำรวจผ่านคอลเลกชันที่แฮชได้
ลองใช้แฮช $stage1Server เพื่อเข้าถึงองค์ประกอบโดยใช้ foreach
foreach($key in $stage1Server.Keys) {
Write-Host "$($key) is $($stage1Server[$key])"
}สคริปต์ PowerShell ด้านบนใช้คำสั่ง foreach เพื่อวนซ้ำคีย์แบบแฮชได้ใน $stage1Server แบบแฮชได้ ใช้ เครื่องหมายวงเล็บเหลี่ยม [] เพื่อเข้าถึงค่าที่เกี่ยวข้องกับคีย์
ผลลัพธ์ของสคริปต์ PowerShell ข้างต้นสำหรับการวนซ้ำผ่าน hashtable คือ:
PS C:\> foreach($key in $stage1Server.Keys) {
Write-Host "$($key) is $($stage1Server[$key])"
}
Port is 80
DbTimeOut is 120
Server is IT-101
DBServer is DB-CORP1
Username is admin
DBUser is dbadmin
PS C:\> การใช้ ForEach-Object เพื่อวนซ้ำ hashtable
การใช้ Foreach-object ใน PowerShell ทำให้คุณสามารถวนซ้ำผ่าน hashtable ได้
ลองพิจารณาแฮชของ $stage1Server เพื่อทำความเข้าใจการใช้ Foreach-object ในการวนซ้ำ
$stage1Server.keys|ForEach-Object {
Write-Host "$($_) is $($stage1Server[$_])"
}ในสคริปต์ PowerShell ข้างต้น ให้ไปป์ $stage1Server.Keys ไปยังคำสั่ง ForEach-Object เพื่อการวนซ้ำ ในบล็อกสคริปต์ จะใช้คำสั่ง Write-Host เพื่อแสดงค่าที่เกี่ยวข้องกับรายการคีย์ในแฮชเทเบิล
ผลลัพธ์ของสคริปต์ด้านบนคือ:
Port is 80
DbTimeOut is 120
Server is IT-101
DBServer is DB-CORP1
Username is admin
DBUser is dbadminการใช้ GetEnumerator เพื่อวนซ้ำผ่าน hashtable
วัตถุตารางแฮชของ PowerShell มีเมธอด GetEnumerator() ที่สามารถใช้เพื่อระบุคอลเลกชัน
ในสคริปต์ต่อไปนี้ แฮช $stage1Server ใช้วิธีการ GetEnumerator() และไปป์เอาต์พุตไปยัง foreach-object สำหรับการวนซ้ำของวัตถุตัวแจงนับ . ในบล็อกสคริปต์ จะใช้คีย์และค่าเพื่อดึงข้อมูลรายการในแฮชเทเบิล
$stage1Server.GetEnumerator()|ForEach-Object {
Write-Host "$($_.Key) : $($_.Value)"
}ผลลัพธ์ของสคริปต์ PowerShell ข้างต้นคือ:
Port : 80
DbTimeOut : 120
Server : IT-101
DBServer : DB-CORP1
Username : admin
DBUser : dbadminแก้ไข Hashtable ใน PowerShell
คุณสามารถแก้ไขรายการในแฮชเทเบิลได้โดยใช้วิธีต่างๆ
วิธีง่ายๆ ในการแก้ไขค่าของคีย์เฉพาะใน hashtable ให้ใช้ เครื่องหมายวงเล็บเหลี่ยม [] เพื่อระบุคีย์และกำหนดค่า มันจะเขียนทับค่าที่มีอยู่ซึ่งเชื่อมโยงกับคีย์ในแฮชเทเบิล
$stage1Server["Server"] = "IT-101A"เอาท์พุต :
PS D:\> $stage1Server["Server"] = "IT-101A" PS D:\> $stage1Server
Name Value
---- -----
Port 80
DbTimeOut 120
Server IT-101A
DBServer DB-CORP1
Username admin
DBUser dbadminอีกวิธีในการเปลี่ยนแปลงหรืออัพเดตค่าใน hashtable คือการใช้คุณสมบัติ Item parameterized
รายการ คุณสมบัติที่กำหนดพารามิเตอร์ของวัตถุ hashtable มี {get; set;} เพื่อดึงข้อมูลและตั้งค่า
$stage1Server.Item("Server") = "IT-101-South" เอาท์พุต :
PS D:\> $stage1Server.Item("Server") = "IT-101-South" PS D:\> $stage1Server
Name Value
---- -----
Port 80
DbTimeOut 120
Server IT-101-South
DBServer DB-CORP1
Username admin
DBUser dbadminลบรายการใน Hashtable
ออบเจ็กต์แฮชของ PowerShell มีเมธอด Remove() ที่ใช้คีย์เป็นพารามิเตอร์อินพุตเพื่อลบคู่คีย์-ค่าออกจากแฮชเทเบิล
$stage1Server = @{
"Server" = "IT-101"
"Port" = "80"
"Username" = "admin"
"DBServer" = "DB-CORP1"
"DBUser" = "dbadmin"
"DbTimeOut" = 120
}
# Remove element from the hashtable
$stage1Server.Remove("DBUser")ผลลัพธ์ของสคริปต์ PowerShell ข้างต้นจะลบคู่คีย์-ค่าออกจากแฮชเทเบิล
PS D:\> $stage1Server.Remove("DBUser") PS D:\> $stage1Server
Name Value
---- -----
Port 80
DbTimeOut 120
Server IT-101-South
DBServer DB-CORP1
Username adminบทสรุป
Hashtable ใน PowerShell เป็นโครงสร้างข้อมูลที่ทรงพลังมาก ซึ่งสามารถใช้เพื่อเพิ่ม แก้ไข ลบ และดึงรายการจาก hashtable ได้อย่างง่ายดาย
คุณสามารถดูหัวข้อเพิ่มเติมเกี่ยวกับคำสั่ง PowerShell Active Directory และข้อมูลพื้นฐานของ PowerShell ได้ในหน้าแรกของ ShellGeek

