Che cosa fa il simbolo “@” in PowerShell?

Ho visto il simbolo @ utilizzato in PowerShell per inizializzare gli array. Che cosa indica esattamente il simbolo @ e dove posso leggere di più a riguardo?

PowerShell considera effettivamente qualsiasi elenco separato da virgole come una matrice:

“Server1”, “server2”

Quindi @ è facoltativo in questi casi. Tuttavia, per gli array associativi, è necessario @:

@ { “Key” = “valore”; “Key2” = “Valore2”}

Ufficialmente, @ è il “gestore di array”. Puoi leggere ulteriori informazioni a riguardo nella documentazione che è stata installata insieme a PowerShell o in un libro come “Windows PowerShell: TFM”, di cui sono stato co-autore :).

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 

Mentre le risposte di cui sopra forniscono la maggior parte della risposta, è utile, anche in questo caso, fornire la risposta completa, ovvero:

Sottoespressione di matrice (vedi about_arrays )

Forza il valore a essere un array, anche se un singleton o un null, ad esempio $a = @(ps | where name -like 'foo')

Inizializzatore hash (vedi about_hash_tables )

Inizializza una tabella hash con coppie chiave-valore, ad esempio $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true } $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (vedi about_splatting )

Invochiamo un cmdlet con parametri da una matrice o da una tabella hash piuttosto che dai parametri personalizzati più singolarmente enumerati, ad esempio utilizzando la tabella hash appena sopra, Copy-Item @HashArguments

Qui stringhe (vedi about_quoting_rules )

Creiamo stringhe con citazioni facilmente incorporate, tipicamente utilizzate per stringhe multilinea, ad esempio:

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

Poiché questo tipo di domanda ( cosa significa ‘x’ notazione in PowerShell? ) È così comune qui su StackOverflow così come in molti commenti dei lettori, ho messo insieme un lessico della punteggiatura di PowerShell, appena pubblicato su Simple-Talk.com. Leggi tutto su @ e% e # e $ _ e? e altro ancora alla Guida completa alla punteggiatura di PowerShell . Allegato all’articolo è questo wallchart che ti dà tutto su un singolo foglio: inserisci la descrizione dell'immagine qui

Puoi anche racchiudere l’output di un cmdlet (o pipeline) in @ () per assicurarti che ciò che ottieni sia una matrice piuttosto che un singolo elemento.

Ad esempio, dir solitamente restituisce un elenco, ma a seconda delle opzioni, potrebbe restituire un singolo object. Se stai pianificando di iterare attraverso i risultati con un object foreach, devi assicurarti di ottenere una lista. Ecco un esempio forzato:

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

Un’altra cosa … una matrice vuota (come per inizializzare una variabile) è denotata @ ().

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 usiamo un array per connettersi a più computer remoti:

$ strComputers = @ (“Server1”, “Server2”, “Server3”)

Sono usati per matrici e hash.

Tutorial di PowerShell 7: Accumula, richiama e modifica i dati

Array Literals In PowerShell