¿Qué hace el símbolo “@” en Powershell?

He visto el símbolo @ utilizado en PowerShell para inicializar matrices. ¿Qué significa exactamente el símbolo @ y dónde puedo leer más al respecto?

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

“servidor1”, “servidor2”

Entonces el @ es opcional en esos casos. Sin embargo, para matrices asociativas, se requiere @:

@ {“Key” = “Value”; “Key2” = “Value2”}

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 :).

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 

Si bien las respuestas anteriores proporcionan la mayor parte de la respuesta, es útil, incluso tan tarde a la pregunta, proporcionar la respuesta completa, a saber:

Subestación de matriz (ver about_arrays )

Obliga a que el valor sea una matriz, incluso si es un singleton o un valor nulo, por ejemplo $a = @(ps | where name -like 'foo')

Inicializador hash (ver about_hash_tables )

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

Splatting (ver about_splatting )

Vamos a invocar un cmdlet con parámetros de una matriz o una tabla hash en lugar de los parámetros enumerados individualmente más habituales, por ejemplo, utilizando la tabla hash justo arriba, Copy-Item @HashArguments

Aquí cadenas (ver about_quoting_rules )

Le permite crear cadenas con comillas fáciles de insertar, generalmente usadas para cadenas de varias líneas, por ejemplo:

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

Debido a que este tipo de pregunta ( ¿qué 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, que acaba de publicarse en Simple-Talk.com. Lea todo sobre @, así como% y # y $ _ y? y más en 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

También puede ajustar el resultado de un cmdlet (o canalización) en @ () para garantizar 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. Aquí hay un ejemplo artificial:

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

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

El operador Splatting

Para crear una matriz, creamos una variable y asignamos la matriz. Las matrices se indican con el símbolo “@”. Tomemos la discusión anterior y usemos una matriz para conectarnos a múltiples computadoras remotas:

$ strComputers = @ (“Servidor1”, “Servidor2”, “Servidor3”)

Se usan para matrices y hash.

Tutorial de PowerShell 7: Acumular, recuperar y modificar datos

Array Literals en PowerShell