web-dev-qa-db-fra.com

Que fait le symbole "@" dans Powershell?

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

99
GrahamMc

PowerShell traitera en réalité 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 requis:

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

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

70
Don Jones

Dans PowerShell V2, @ est également le 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
108
Jeffrey Snover - MSFT

Bien que les réponses ci-dessus fournissent la plupart de la réponse, il est utile, même tardivement à 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 null, par ex. $a = @(ps | where name -like 'foo')

Initialiseur de hachage (voir about_hash_tables )

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

Splatting (voir about_splatting )

Vous pouvez appeler une cmdlet avec des paramètres provenant d'un tableau ou d'une table de hachage plutôt que des paramètres énumérés individuellement plus habituels, par exemple. en utilisant la table de hachage juste au-dessus, Copy-Item @HashArguments

Voici des chaînes (voir about_quoting_rules )

Vous permet de créer des chaînes avec des guillemets facilement incorporés, généralement utilisés pour les chaînes multilignes, par exemple:

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

Parce que ce type de question ( que signifie "x" dans PowerShell?) est si courant ici sur StackOverflow ainsi que dans de nombreux commentaires de lecteurs, j’ai élaboré un lexique de la ponctuation, juste publié sur Simple-Talk.com. Lisez tout sur @ ainsi que% et # et $ _ et? et plus sur Guide complet de la ponctuation PowerShell . Cette image murale est jointe à l’article. Elle contient tout ce qui est présenté sur une seule feuille: enter image description here

45
Michael Sorens

Vous pouvez également encapsuler la sortie d'une cmdlet (ou d'un pipeline) dans @() 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 en fonction des 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)

Une dernière chose ... un tableau vide (comme pour initialiser une variable) est noté @().

26
Mike Shepard

L'opérateur Splatting

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

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

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

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

littéraux de tableau dans PowerShell

8
Cadoo