Apa fungsi simbol "@" di Powershell?

112

Saya telah melihat simbol @ yang digunakan di PowerShell untuk menginisialisasi array. Apa sebenarnya yang dilambangkan oleh simbol @ dan di mana saya dapat membacanya lebih lanjut?

GrahamMc
sumber

Jawaban:

82

PowerShell sebenarnya akan memperlakukan daftar yang dipisahkan koma sebagai larik:

"server1","server2"

Jadi @ adalah opsional dalam kasus tersebut. Namun, untuk array asosiatif, @ diperlukan:

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

Secara resmi, @ adalah "operator array". Anda dapat membaca lebih lanjut tentang ini dalam dokumentasi yang diinstal bersama PowerShell, atau di buku seperti "Windows PowerShell: TFM", yang saya tulis bersama.

Don Jones
sumber
12
Pastikan untuk memeriksa jawaban Jeffrey Snover di bawah ... @ lebih dari sekadar pengenal array.
Eric Schoonover
115

Di PowerShell V2, @ juga merupakan operator Percikan .

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
Jeffrey Snover - MSFT
sumber
1
Inilah yang saya cari: operator ini digunakan dalam konteks percikan di skrip penyebaran Grup Sumber Daya Azure.
Alex Marshall
57

Meskipun tanggapan di atas memberikan sebagian besar jawaban, namun berguna - bahkan sampai pertanyaan ini - untuk memberikan jawaban lengkap, yaitu:

Array sub-ekspresi (lihat about_arrays )

Memaksa nilai menjadi larik, bahkan jika tunggal atau nol, misalnya $a = @(ps | where name -like 'foo')

Penginisialisasi hash (lihat about_hash_tables )

Menginisialisasi tabel hash dengan pasangan nilai-kunci, misalnya $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Percikan (lihat about_splatting )

Mari Anda memanggil cmdlet dengan parameter dari larik atau tabel hash daripada parameter yang disebutkan secara individual yang lebih umum, misalnya menggunakan tabel hash tepat di atas, Copy-Item @HashArguments

Di sini string (lihat about_quoting_rules )

Mari Anda membuat string dengan tanda kutip yang mudah disematkan, biasanya digunakan untuk string multi-baris, misalnya:

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

Karena jenis pertanyaan ini ( apa arti notasi 'x' di PowerShell? ) Begitu umum di StackOverflow serta di banyak komentar pembaca, saya mengumpulkan leksikon tanda baca PowerShell, yang baru saja diterbitkan di Simple-Talk.com. Baca semua tentang @ serta% dan # dan $ _ dan? dan lebih banyak lagi di The Complete Guide to PowerShell Punctuation . Artikel terlampir adalah diagram dinding yang memberi Anda segalanya dalam satu lembar: masukkan deskripsi gambar di sini

Michael Sorens
sumber
Panduan menyeluruh untuk semua penggunaan @. Saya datang ke sini mencari tali di sini. Terima kasih!
Nixphoe
27

Anda juga dapat menggabungkan output dari cmdlet (atau pipeline) @()untuk memastikan bahwa yang Anda dapatkan adalah array, bukan satu item.

Misalnya, dir biasanya mengembalikan daftar, tetapi tergantung pada opsinya, itu mungkin mengembalikan satu objek. Jika Anda berencana mengulang hasil dengan objek-depan, Anda perlu memastikan Anda mendapatkan daftar kembali. Inilah contoh yang dibuat-buat:

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

Satu hal lagi ... array kosong (seperti menginisialisasi variabel) dilambangkan @().

Mike Shepard
sumber
[array] $ a sintaks agak lebih jelas, secara visual, tapi tip bagus.
Don Jones