Que fait le symbole «@» dans Powershell?

112

J'ai vu le symbole @ utilisé dans PowerShell pour initialiser les tableaux. Que signifie exactement le symbole @ et où puis-je en savoir plus?

GrahamMc
la source

Réponses:

82

PowerShell traitera en fait toute liste séparée par des virgules comme un tableau:

"server1","server2"

Le @ est donc facultatif dans ces cas. Cependant, pour les tableaux associatifs, le @ est obligatoire:

@{"Key"="Value";"Key2"="Value2"}

Officiellement, @ est «l'opérateur de tableau». Vous pouvez en savoir plus à ce sujet dans la documentation installée avec PowerShell ou dans un livre comme «Windows PowerShell: TFM», que j'ai co-écrit.

Don Jones
la source
12
Assurez-vous de consulter la réponse de Jeffrey Snover ci-dessous ... @ est plus qu'un simple identifiant de tableau.
Eric Schoonover
115

Dans PowerShell V2, @ est également l' opérateur 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
Jeffrey Snover - MSFT
la source
1
C'est ce que je recherchais: cet opérateur est utilisé dans le contexte splat dans les scripts de déploiement Azure Resource Group.
Alex Marshall
57

Bien que les réponses ci-dessus fournissent la plupart de la réponse, il est utile - même si tard à la question - de fournir la réponse complète, à savoir:

Sous-expression de tableau (voir about_arrays )

Force la valeur à être un tableau, même si un singleton ou un nul, par exemple $a = @(ps | where name -like 'foo')

Initialiseur de hachage (voir about_hash_tables )

Initialise une table de hachage avec des paires clé-valeur, par exemple $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (voir about_splatting )

Appelons une applet de commande avec des paramètres d'un tableau ou d'une table de hachage plutôt que les paramètres énumérés individuellement plus habituels, par exemple en utilisant la table de hachage juste au-dessus, Copy-Item @HashArguments

Ici les chaînes (voir about_quoting_rules )

Créons des chaînes avec des guillemets facilement incorporés, généralement utilisées pour les chaînes multilignes, par exemple:

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

Parce que ce type de question ( que signifie la notation `` x '' dans PowerShell? ) Est si courant ici sur StackOverflow ainsi que dans de nombreux commentaires de lecteurs, j'ai rassemblé un lexique de la ponctuation PowerShell, juste publié sur Simple-Talk.com. Lisez tout sur @ ainsi que sur% et # et $ _ et? et plus encore sur le Guide complet de la ponctuation PowerShell . Attaché à l'article se trouve ce tableau mural qui vous donne tout sur une seule feuille: entrez la description de l'image ici

Michael Sorens
la source
Présentation très approfondie de toutes les utilisations de @. Je suis venu ici à la recherche de la chaîne ici. Je vous remercie!
Nixphoe
27

Vous pouvez également encapsuler la sortie d'une applet de commande (ou d'un pipeline) @()pour vous assurer que ce que vous récupérez est un tableau plutôt qu'un seul élément.

Par exemple, dir renvoie généralement une liste, mais selon les options, il peut renvoyer un seul objet. Si vous prévoyez de parcourir les résultats avec un objet foreach, vous devez vous assurer de récupérer une liste. Voici un exemple artificiel:

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

Encore une chose ... un tableau vide (comme pour initialiser une variable) est noté @().

Mike Shepard
la source
[array] $ une syntaxe est un peu plus claire, visuellement, mais c'est un bon conseil.
Don Jones
7

L'opérateur d'éclaboussures

Pour créer un tableau, nous créons une variable et assignons le tableau. Les tableaux sont signalés par le symbole «@». Prenons la discussion ci-dessus et utilisons un tableau pour se connecter à plusieurs ordinateurs distants:

$strComputers = @("Server1", "Server2", "Server3")<enter>

Ils sont utilisés pour les tableaux et les hachages.

Tutoriel PowerShell 7: Accumuler, rappeler et modifier des données

Littéraux de tableau dans PowerShell

Cadoo
la source