2008-12-12 11 views

Respuesta

53

PowerShell realmente tratar cualquier lista separada por comas como una matriz:

"server1", "server2"

Así que la @ es opcional en los casos . Sin embargo, para las matrices asociativas, se requiere que el @:

@ { "clave" = "Valor"; "Key2" = "Valor 2"}

Oficialmente, @ es el "operador de matriz." Puede leer más sobre esto en la documentación que se instaló junto con PowerShell, o en un libro como "Windows PowerShell: TFM", del cual soy coautor :).

+6

Asegúrese de revisar la respuesta de Jeffrey Snover a continuación ... @ es más que un identificador de matriz. –

22

También puede ajustar la salida de un cmdlet (o canalización) en @() para asegurarse de que lo que obtiene es una matriz en lugar de un solo elemento.

Por ejemplo, dir generalmente devuelve una lista, pero dependiendo de las opciones, puede devolver un solo objeto. Si planea iterar a través de los resultados con un objeto foreach, debe asegurarse de obtener una lista. He aquí un ejemplo artificioso:

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

Una cosa más ... una matriz vacía (como para inicializar una variable) se denota @().

+0

[matriz] $ una sintaxis es algo más clara, visualmente, pero buena sugerencia. –

85

En PowerShell V2, @ es también el operador 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 

Experiment! ¡Disfrutar! ¡Contratar!

Jeffrey Snover [MSFT] Arquitecto socio de administración de Windows

+1

Ok. Puedo perdonar el incumplimiento con los colores ECMA-48 para esto, porque guau eso es genial. –

+0

Esto es lo que estaba buscando: este operador se usa en el contexto de splat en las secuencias de comandos de implementación de Azure Resource Group. –

22

Mientras que las respuestas anteriores proporcionan más de la respuesta es útil - incluso tan tarde a la pregunta - para proporcionar la respuesta completa, a saber :

matriz de sub-expresión (ver about_arrays)

Fuerzas el valor a ser una matriz, incluso si un único o un valor nulo, por ejemplo,$a = @(ps | where name -like 'foo')

Hash inicializador (ver about_hash_tables)

Inicializa una tabla hash con pares de valores clave, por ejemplo $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

splatting (ver about_splatting)

te permite invocar un cmdlet con los parámetros de una matriz o una tabla hash en lugar de los parámetros más habituales enumerados individualmente, por ejemplo, usando la tabla hash justo por encima, Copy-Item @HashArguments

Aquí cadenas (ver about_quoting_rules)

de crear cadenas con citas fácilmente incorporados, utilizados normalmente para las cadenas de múltiples líneas, por ejemplo Let:

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

Debido a que este tipo de pregunta (lo que significa la notación 'x' en PowerShell?) es tan común aquí en StackOverflow como en muchos comentarios de los lectores, armé un léxico de puntuación de PowerShell, solo publicado d en Simple-Talk.com. Lea todo sobre @, así como% y # y $ _ y? y más al The Complete Guide to PowerShell Punctuation. Adjunto al artículo está este gráfico que le da todo en una sola hoja: enter image description here

Cuestiones relacionadas