Risposte:
PowerShell tratterà effettivamente qualsiasi elenco separato da virgole come un array:
"server1","server2"
Quindi la @ è facoltativa in questi casi. Tuttavia, per gli array associativi, il simbolo @ è obbligatorio:
@{"Key"="Value";"Key2"="Value2"}
Ufficialmente, @ è l '"operatore di matrice". Puoi leggere ulteriori informazioni al riguardo nella documentazione installata insieme a PowerShell o in un libro come "Windows PowerShell: TFM", di cui sono coautore.
In PowerShell V2, @ è anche l' operatore 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
Sebbene le risposte di cui sopra forniscano la maggior parte della risposta, è utile, anche così tardi alla domanda, fornire la risposta completa, ovvero:
Sottoespressione array (vedere about_arrays )
Forza il valore a essere un array, anche se singleton o null, ad es $a = @(ps | where name -like 'foo')
Inizializzatore hash (vedi about_hash_tables )
Inizializza una tabella hash con coppie chiave-valore, ad es
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Splatting (vedi about_splatting )
Consente di richiamare un cmdlet con parametri da un array o da una tabella hash anziché i parametri enumerati individualmente più consueti, ad esempio utilizzando la tabella hash appena sopra, Copy-Item @HashArguments
Qui stringhe (vedi about_quoting_rules )
Consente di creare stringhe con virgolette facilmente incorporate, tipicamente utilizzate per stringhe su più righe, ad esempio:
$data = @"
line one
line two
something "quoted" here
"@
Poiché questo tipo di domanda ( cosa significa la notazione "x" in PowerShell? ) È così comune qui su StackOverflow e in molti commenti dei lettori, ho messo insieme un lessico di punteggiatura di PowerShell, appena pubblicato su Simple-Talk.com. Leggi tutto su @ così come% e # e $ _ e? e altro ancora in The Complete Guide to PowerShell Punctuation . In allegato all'articolo c'è questo wallchart che ti dà tutto su un unico foglio:
È inoltre possibile eseguire il wrapping dell'output di un cmdlet (o pipeline) @()
per assicurarsi che ciò che si ottiene sia una matrice anziché un singolo elemento.
Ad esempio, dir di solito restituisce un elenco, ma a seconda delle opzioni, potrebbe restituire un singolo oggetto. Se stai pianificando di iterare i risultati con un oggetto foreach, devi assicurarti di recuperare un elenco. Ecco un esempio artificioso:
$results = @( dir c:\autoexec.bat)
Un'altra cosa ... viene indicato un array vuoto (come inizializzare una variabile) @()
.
L'operatore Splatting
Per creare un array, creiamo una variabile e assegniamo l'array. Gli array sono contrassegnati dal simbolo "@". Prendiamo la discussione sopra e utilizziamo un array per connettersi a più computer remoti:
$strComputers = @("Server1", "Server2", "Server3")<enter>
Sono usati per array e hash.