Câu trả lời:
PowerShell thực sự sẽ coi mọi danh sách được phân tách bằng dấu phẩy là một mảng:
"server1","server2"
Vì vậy, @ là tùy chọn trong những trường hợp đó. Tuy nhiên, đối với các mảng kết hợp, @ là bắt buộc:
@{"Key"="Value";"Key2"="Value2"}
Về mặt chính thức, @ là "toán tử mảng". Bạn có thể đọc thêm về nó trong tài liệu cài đặt cùng với PowerShell hoặc trong một cuốn sách như "Windows PowerShell: TFM" mà tôi là đồng tác giả.
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
Mặc dù các câu trả lời ở trên cung cấp hầu hết câu trả lời nhưng rất hữu ích - ngay cả khi câu hỏi đã muộn - để cung cấp câu trả lời đầy đủ, với sự dí dỏm:
Biểu thức con mảng (xem about_arrays )
Buộc giá trị là một mảng, ngay cả khi một đơn hoặc một null, ví dụ: $a = @(ps | where name -like 'foo')
Trình khởi tạo băm (xem about_hash_tables )
Khởi tạo bảng băm với các cặp khóa-giá trị, ví dụ:
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Splatting (xem about_splatting )
Hãy cho phép bạn gọi một lệnh ghép ngắn với các tham số từ một mảng hoặc một bảng băm thay vì các tham số được liệt kê riêng lẻ tùy chỉnh hơn, ví dụ: sử dụng bảng băm ngay trên, Copy-Item @HashArguments
Đây chuỗi (xem about_quoting_rules )
Hãy để bạn tạo chuỗi với dấu ngoặc kép được nhúng dễ dàng, thường được sử dụng cho chuỗi nhiều 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? ) Ở đây rất phổ biến trên StackOverflow cũng như trong nhiều nhận xét của độc giả, tôi đã tổng hợp một từ vựng về dấu câu PowerShell, vừa được xuất bản trên Simple-Talk.com. Đọc tất cả về @ cũng như% và # và $ _ và? và hơn thế nữa tại Hướng dẫn đầy đủ về Dấu câu PowerShell . Đính kèm với bài viết là bảng vẽ tường này cung cấp cho bạn mọi thứ trên một trang tính:
Bạn cũng có thể bao bọc đầu ra của một lệnh ghép ngắn (hoặc đường ống dẫn) @()
để đảm bảo rằng những gì bạn nhận lại là một mảng chứ không phải 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 lại các kết quả với một đối tượng foreach, bạn cần đảm bảo rằng bạn lấy lại danh sách. Đây là một ví dụ giả định:
$results = @( dir c:\autoexec.bat)
Một điều nữa ... một mảng trống (giống như để khởi tạo một biến) được ký hiệu @()
.
Nhà điều hành Splatting
Để tạo mảng, chúng ta tạo một biến và gán mảng. Mảng được ghi chú bằng ký hiệu "@". Hãy cùng 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")<enter>
Chúng được sử dụng cho mảng và hàm băm.
Hướng dẫn PowerShell 7: Tích lũy, thu hồi và sửa đổi dữ liệu