สัญลักษณ์“ @” ทำอะไรใน Powershell?


112

ฉันเคยเห็นสัญลักษณ์ @ ที่ใช้ใน PowerShell เพื่อเริ่มต้นอาร์เรย์ สัญลักษณ์ @ หมายถึงอะไรและฉันจะอ่านเพิ่มเติมได้ที่ไหน

คำตอบ:


82

PowerShell จะถือว่ารายการที่คั่นด้วยจุลภาคเป็นอาร์เรย์:

"server1","server2"

ดังนั้น @ จึงเป็นทางเลือกในกรณีเหล่านั้น อย่างไรก็ตามสำหรับอาร์เรย์ที่เชื่อมโยงต้องมี @:

@{"Key"="Value";"Key2"="Value2"}

อย่างเป็นทางการ @ คือ "ตัวดำเนินการอาร์เรย์" คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในเอกสารที่ติดตั้งพร้อมกับ PowerShell หรือในหนังสือเช่น "Windows PowerShell: TFM" ซึ่งฉันร่วมเขียน


12
อย่าลืมตรวจสอบคำตอบของ Jeffrey Snover ด้านล่าง ... @ เป็นมากกว่าตัวระบุอาร์เรย์
Eric Schoonover

115

ใน PowerShell V2 @ นอกจากนั้นยังมีผู้ประกอบการ Splat

PS> # First use it to create a hashtable of parameters:
PS> $params = @{path = "c:\temp"; Recurse= $true}
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters.
PS> dir @params
PS> # That was the equivalent of:
PS> dir -Path c:\temp -Recurse:$true

1
นี่คือสิ่งที่ฉันกำลังมองหา: ตัวดำเนินการนี้ถูกใช้ในบริบท splat ในสคริปต์การปรับใช้ Azure Resource Group
Alex Marshall

57

แม้ว่าคำตอบข้างต้นจะให้คำตอบส่วนใหญ่แต่ก็มีประโยชน์แม้ในช่วงท้ายของคำถามนี้ - เพื่อให้คำตอบที่สมบูรณ์เพื่อเป็นปัญญา:

นิพจน์ย่อยของอาร์เรย์ (ดูabout_arrays )

บังคับให้ค่าเป็นอาร์เรย์แม้ว่าซิงเกิลตันหรือค่าว่างเช่น $a = @(ps | where name -like 'foo')

เครื่องมือเริ่มต้นแฮช (ดูabout_hash_tables )

เริ่มต้นตารางแฮชด้วยคู่คีย์ - ค่าเช่น $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (ดูabout_splatting )

ให้คุณเรียกใช้ cmdlet ด้วยพารามิเตอร์จากอาร์เรย์หรือตารางแฮชแทนที่จะเป็นพารามิเตอร์ที่แจกแจงทีละรายการตามธรรมเนียมเช่นการใช้ตารางแฮชด้านบน Copy-Item @HashArguments

นี่คือสตริง (ดูabout_quoting_rules )

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

$data = @"
line one
line two
something "quoted" here
"@

เนื่องจากคำถามประเภทนี้ ( สัญกรณ์ 'x' หมายถึงอะไรใน PowerShell? ) เป็นเรื่องปกติที่นี่ใน StackOverflow และในความคิดเห็นของผู้อ่านจำนวนมากฉันจึงรวบรวมคำศัพท์ของเครื่องหมายวรรคตอน PowerShell ซึ่งเพิ่งเผยแพร่บน Simple-Talk.com อ่านทั้งหมดเกี่ยวกับ @ เช่นเดียวกับ% และ # และ $ _ และ? และอื่น ๆ ที่สมบูรณ์คู่มือ PowerShell เครื่องหมายวรรคตอน สิ่งที่แนบมากับบทความคือแผนภูมิผนังนี้ที่ให้ทุกอย่างในแผ่นเดียว: ใส่คำอธิบายภาพที่นี่


เดินอย่างละเอียดถี่ถ้วนเกี่ยวกับการใช้ @ ทั้งหมด ฉันมาที่นี่เพื่อค้นหาสตริงที่นี่ ขอบคุณ!
Nixphoe

27

คุณยังสามารถรวมเอาท์พุทของ cmdlet (หรือไปป์ไลน์) @()เพื่อให้แน่ใจว่าสิ่งที่คุณได้รับกลับมานั้นเป็นอาร์เรย์แทนที่จะเป็นรายการเดียว

ตัวอย่างเช่น dir มักจะส่งคืนรายการ แต่ขึ้นอยู่กับตัวเลือกอาจส่งคืนอ็อบเจ็กต์เดียว หากคุณกำลังวางแผนที่จะทำซ้ำผลลัพธ์ด้วย foreach-object คุณต้องแน่ใจว่าคุณได้รับรายการกลับคืนมา นี่คือตัวอย่างที่สร้างขึ้น:

$results = @( dir c:\autoexec.bat)

อีกอย่างหนึ่ง ... อาร์เรย์ว่าง (เช่นการเริ่มต้นตัวแปร) แสดง@()อยู่


[array] $ a syntax ค่อนข้างชัดเจนมองเห็นได้ แต่เป็นเคล็ดลับที่ดี
Don Jones

7

ตัวดำเนินการ Splatting

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

$strComputers = @("Server1", "Server2", "Server3")<enter>

ใช้สำหรับอาร์เรย์และแฮช

บทช่วยสอน PowerShell 7: รวบรวมเรียกคืนและแก้ไขข้อมูล

Array Literals ใน PowerShell

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.