2008-12-12 32 views

Odpowiedz

53

PowerShell rzeczywiście traktują każdą listę oddzielonych przecinkami jako tablica:

"server1", "server2"

Tak @ jest opcjonalne w tych przypadkach . Jednak dla asocjacyjnych The @ wymagana jest

@ { "klucz" = "wartość", "klucz 2" = "wartość2"}

Oficjalnie @ jest "operator tablicy". Możesz przeczytać więcej na ten temat w dokumentacji, która została zainstalowana wraz z PowerShell, lub w książce takiej jak "Windows PowerShell: TFM", którą współautorem :).

+6

Upewnij się, że odpowiedź Jeffrey Snover poniżej ... @ to coś więcej niż identyfikator tablicy. –

22

Można również zawijać dane wyjściowe cmdletu (lub potoku) w @(), aby upewnić się, że to, co otrzymasz, jest tablicą, a nie pojedynczym elementem.

Na przykład dir zwykle zwraca listę, ale w zależności od opcji może zwrócić pojedynczy obiekt. Jeśli planujesz iterować wyniki z foreach-object, musisz upewnić się, że otrzymasz listę z powrotem. Oto zmyślony przykład:

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

Jeszcze jedno ... pustą tablicą (jak zainicjować zmienną) oznaczamy @().

+0

[array] $ składnia jest nieco jaśniejsza, wizualnie, ale dobra wskazówka. –

85

W PowerShell V2 @ jest również operatorem 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 

Eksperyment! Cieszyć się! Angażować!

Jeffrey Snover [MSFT] Architekt Okna Partner Zarządzanie

+1

Ok. Mogę wybaczyć tę niezgodność z kolorami ECMA-48, ponieważ wow jest całkiem fajnie. –

+0

Tego właśnie szukałem: ten operator jest używany w kontekście ikon w skryptach wdrażania Azure Resource Group. –

22

Choć powyższe reakcje dostarczają najwięcej na odpowiedź jest przydatna - nawet tak późno na pytanie - w celu zapewnienia pełnej odpowiedzi, a mianowicie :

macierzy sub ekspresja (patrz about_arrays)

Wymusza wartość jako macierz, nawet pojedyncza lub zerowy, np$a = @(ps | where name -like 'foo')

Hash inicjator (patrz about_hash_tables)

Inicjuje tabeli mieszania parami klucz wartość, np $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

splatting (patrz about_splatting)

pozwala ci wywołać cmdlet z parametrów z tablicy lub hash-table zamiast zwyczajowych bardziej indywidualnie wymienionych parametrów, na przykład korzystając z tabeli mieszania tuż powyżej, Copy-Item @HashArguments

Tu Struny (patrz about_quoting_rules)

pozwala ci tworzyć ciągi z łatwością wbudowanych cytatów, zazwyczaj używany do strun multi-line, np:

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

Ponieważ tego typu pytanie (, co oznacza notacja "x" w PowerShell?) jest tak powszechne w StackOverflow, jak również w wielu komentarzach czytelników, skomponowałem leksykę interpunkcji PowerShell, po prostu publikuj d na Simple-Talk.com. Przeczytaj wszystko na temat @, a także% i # oraz $ _ i? i więcej pod adresem The Complete Guide to PowerShell Punctuation. Do artykułu dołączona jest ta tablica ścienna, która zawiera wszystko na jednym arkuszu: enter image description here