2008-12-12 283 views

回答

53

的PowerShell將實際治療任何逗號分隔的列表作爲一個數組:

「服務器1」, 「服務器2」

因此@是在這些情況下可選。然而,對於關聯數組,需要@:

@ { 「密鑰」= 「值」; 「密鑰2」= 「值2」}

正式地,@是 「數組運算符」。您可以在隨PowerShell一起安裝的文檔中閱讀更多內容,也可以在我共同撰寫的書籍「Windows PowerShell:TFM」中找到它。

+6

請務必檢查出Jeffrey Snover的答案在下面... @不僅僅是一個數組標識符。 – 2009-09-15 06:47:13

22

您還可以在@()中包裝cmdlet(或管道)的輸出,以確保您返回的是數組而不是單個項目。

例如,dir通常會返回一個列表,但根據選項,它可能會返回一個對象。如果你打算用foreach對象遍歷結果,你需要確保你得到一個列表。這裏有一個人爲的例子:

$結果= @(DIR C:\ AUTOEXEC.BAT)

一件事...空數組(喜歡初始化變量)被表示@()。

+0

[array] $ a語法在視覺上更清晰一些,但是很好。 – 2008-12-13 04:43:50

85

在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 

實驗!請享用!從事!

傑弗裏Snover [MSFT] Windows管理合夥人建築師

+1

好的。我可以原諒這種不符合ECMA-48顏色的原因,因爲哇,這很酷。 – 2010-04-22 05:16:11

22

雖然上述反應提供的答案是有益的 - 即使這個遲到的問題 - 提供完整的答案,以機智:

陣列子表達(見about_arrays

強制值是一個數組,即使一個單或空,例如$a = @(ps | where name -like 'foo')

哈希初始化(見about_hash_tables

初始化哈希表鍵 - 值對,例如 $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

潑灑(見about_splatting

讓我們調用小命令從數組或一個散列表而不是更習慣單獨列舉的參數,例如參數使用哈希表的正上方,Copy-Item @HashArguments

這裏串(見about_quoting_rules

讓我們創建具有方便的嵌入引號,通常用於多行字符串,如字符串:

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

因爲這種類型的問題('x'符號在PowerShell中的含義是什麼?)在StackOverflow以及許多讀者註釋中很常見,我將PowerShell標點符號放在一起,只是發佈d在Simple-Talk.com上。閱讀所有關於@以及%和#和$ _和?和更多在The Complete Guide to PowerShell Punctuation。附加到這篇文章是這張牆紙,給你在一張紙上的一切: enter image description here