Respuestas:
PowerShell realmente tratará cualquier lista separada por comas como una matriz:
"server1","server2"
Entonces @ 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, @ también es el operador de 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 para la pregunta, proporcionar la respuesta completa, a saber:
Subexpresión de matriz (consulte about_arrays )
Obliga al valor a ser una matriz, incluso si es un singleton o un nulo, por ejemplo $a = @(ps | where name -like 'foo')
Inicializador de hash (consulte about_hash_tables )
Inicializa una tabla hash con pares clave-valor, p. Ej.
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Salpicaduras (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 )
Vamos a crear cadenas con comillas fácilmente incrustadas, normalmente utilizadas 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, así como en muchos comentarios de lectores, reuní un léxico de puntuación de PowerShell, recién publicado 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 se encuentra este gráfico mural que le brinda todo en una sola hoja:
También puede ajustar la salida de un cmdlet (o canalización) @()
para asegurarse de que lo que obtenga sea 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 ... se denota una matriz vacía (como para inicializar una variable) @()
.
El operador de salpicaduras
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 = @("Server1", "Server2", "Server3")<enter>
Se utilizan para matrices y hashes.
Tutorial 7 de PowerShell: acumular, recuperar y modificar datos