Respostas:
O PowerShell realmente tratará qualquer lista separada por vírgulas como uma matriz:
"server1","server2"
Portanto, o @ é opcional nesses casos. No entanto, para matrizes associativas, o @ é obrigatório:
@{"Key"="Value";"Key2"="Value2"}
Oficialmente, @ é o "operador de matriz". Você pode ler mais sobre isso na documentação que foi instalada junto com o PowerShell ou em um livro como "Windows PowerShell: TFM", do qual fui coautor.
No PowerShell V2, @ também é o 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
Embora as respostas acima forneçam a maior parte da resposta, é útil - mesmo tão tarde para a pergunta - fornecer a resposta completa, a saber:
Subexpressão de matriz (consulte about_arrays )
Força o valor a ser uma matriz, mesmo se um singleton ou nulo, por exemplo $a = @(ps | where name -like 'foo')
Inicializador de hash (consulte about_hash_tables )
Inicializa uma tabela hash com pares de valores-chave, por exemplo
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Splatting (consulte about_splatting )
Vamos invocar um cmdlet com parâmetros de uma matriz ou uma tabela hash em vez dos parâmetros enumerados individualmente mais comuns, por exemplo, usando a tabela hash logo acima, Copy-Item @HashArguments
Aqui, strings (veja about_quoting_rules )
Vamos criar strings com aspas facilmente incorporadas, normalmente usadas para strings multilinhas, por exemplo:
$data = @"
line one
line two
something "quoted" here
"@
Como esse tipo de pergunta ( o que a notação 'x' significa no PowerShell? ) É tão comum aqui no StackOverflow, bem como em muitos comentários de leitores, eu reuni um léxico de pontuação do PowerShell, recém-publicado no Simple-Talk.com. Leia tudo sobre @, bem como% e # e $ _ e? e mais em The Complete Guide to PowerShell Punctuation . Anexado ao artigo está este gráfico de parede que mostra tudo em uma única folha:

Você também pode envolver a saída de um cmdlet (ou pipeline) @()para garantir que o que você receberá de volta seja uma matriz em vez de um único item.
Por exemplo, dir geralmente retorna uma lista, mas dependendo das opções, pode retornar um único objeto. Se você está planejando iterar pelos resultados com um objeto foreach, você precisa ter certeza de obter uma lista de volta. Aqui está um exemplo inventado:
$results = @( dir c:\autoexec.bat)
Mais uma coisa ... um array vazio (como inicializar uma variável) é denotado @().
O Operador Splatting
Para criar um array, criamos uma variável e atribuímos o array. As matrizes são identificadas pelo símbolo "@". Vamos pegar a discussão acima e usar uma matriz para se conectar a vários computadores remotos:
$strComputers = @("Server1", "Server2", "Server3")<enter>
Eles são usados para matrizes e hashes.
Tutorial 7 do PowerShell: acumular, recuperar e modificar dados