2008-12-12 26 views

Trả lời

53

PowerShell sẽ thực sự đối xử với bất kỳ danh sách bằng dấu phẩy như một mảng:

"server1", "server2"

Vì vậy, @ là không bắt buộc trong những trường hợp . Tuy nhiên, đối với mảng kết hợp, các @ là cần thiết:

@ { "Key" = "Giá trị"; "khóa2" = "Value2"}

chính thức, @ là "nhà điều hành mảng." Bạn có thể đọc thêm về nó trong tài liệu được cài đặt cùng với PowerShell hoặc trong một cuốn sách như "Windows PowerShell: TFM", mà tôi đồng tác giả :).

+6

Đảm bảo xem câu trả lời của Jeffrey Snover bên dưới ... @ không chỉ là số nhận dạng mảng. –

5

Các Splatting hành

Để tạo một mảng, chúng ta tạo ra một biến và gán mảng. Mảng được ghi chú bằng ký hiệu "@". Chúng ta hãy xem các cuộc thảo luận ở trên và sử dụng một mảng để kết nối với nhiều máy tính từ xa:

$ strComputers = @ ("Server1", "server2", "Server3")

Chúng được sử dụng cho các mảng và băm.

PowerShell Tutorial 7: Accumulate, Recall, and Modify Data

Array Literals In PowerShell

22

Bạn cũng có thể bọc đầu ra của lệnh ghép ngắn (hoặc đường ống) trong @() để đảm bảo rằng những gì bạn nhận được là một mảng thay vì một mục duy nhất.

Ví dụ, dir thường trả về một danh sách, nhưng tùy thuộc vào các tùy chọn, nó có thể trả về một đối tượng duy nhất. Nếu bạn đang lập kế hoạch lặp qua các kết quả với một đối tượng foreach, bạn cần phải chắc chắn rằng bạn nhận được một danh sách trở lại. Dưới đây là một ví dụ contrived:

$ kết quả = @ (dir c: \ autoexec.bat)

hơn Một điều ... một mảng rỗng (muốn khởi tạo một biến) được ký hiệu @().

+0

[mảng] $ một cú pháp là hơi rõ ràng hơn, trực quan, nhưng mẹo tốt. –

85

Trong PowerShell V2, @ cũng là toán tử 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 

Thử nghiệm! Thưởng thức! Thuê!

Jeffrey Snover [MSFT] Kiến trúc sư của Windows Management Partner

+1

Ok. Tôi có thể tha thứ cho sự không tuân thủ với màu sắc ECMA-48 cho điều này, bởi vì wow đó là khá mát mẻ. –

+0

Đây là những gì tôi đang tìm kiếm: toán tử này được sử dụng trong ngữ cảnh splat trong tập lệnh triển khai Azure Resource Group. –

22

Trong khi các câu trả lời ở trên cung cấp nhất của câu trả lời nó rất hữu ích - ngay cả điều này muộn để các câu hỏi - để cung cấp câu trả lời đầy đủ, để wit :

mảng tiểu biểu (xem about_arrays)

lực lượng giá trị là một mảng, ngay cả khi một singleton hoặc null, ví dụ$a = @(ps | where name -like 'foo')

Hash initializer (xem about_hash_tables)

Khởi một bảng băm với cặp khóa-giá trị, ví dụ $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (xem about_splatting)

Hãy bạn gọi một lệnh với các tham số từ một mảng hoặc một bảng băm chứ không phải là thông số phong tục hơn được liệt kê riêng lẻ, ví dụ bằng cách sử dụng bảng băm chỉ trên, Copy-Item @HashArguments

đây các dây (xem about_quoting_rules)

Hãy bạn tạo chuỗi với dấu ngoặc kép dễ dàng nhúng, thường được sử dụng cho các chuỗi đa dòng, ví dụ:

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

Vì loại câu hỏi này (ký hiệu 'x' có nghĩa là gì trong PowerShell?) rất phổ biến ở đây trên StackOverflow cũng như trong nhiều nhận xét của người đọc, tôi đặt cùng một từ vựng của dấu câu PowerShell, chỉ xuất bản d trên Simple-Talk.com. Đọc tất cả về @ cũng như% và # và $ _ và? và nhiều hơn nữa tại The Complete Guide to PowerShell Punctuation. Kèm theo bài viết là wallchart này cung cấp cho bạn mọi thứ trên một trang tính: enter image description here

Các vấn đề liên quan