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