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

ตารางแฮช 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

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