2008-12-12 11 views

Antwort

53

Powershell tatsächlich jede durch Kommata getrennte Liste als Array behandeln:

"server1", "server2"

Also das @ in diesen Fällen ist optional . Doch für assoziativen Arrays wird die @ erforderlich:

@ { "Key" = "Wert", "Key2" = "Value2"}

Offiziell @ ist der "Array-Operator." Sie können mehr darüber in der Dokumentation lesen, die zusammen mit PowerShell installiert wurde, oder in einem Buch wie "Windows PowerShell: TFM", das ich mitverfasst habe :).

+6

Stellen Sie sicher, Jeffrey Snover Antwort unten zu überprüfen ... @ ist mehr als nur eine Array-ID. –

22

Sie können auch die Ausgabe eines Cmdlet (oder einer Pipeline) in @() umbrechen, um sicherzustellen, dass Sie ein Array und nicht ein einzelnes Element erhalten.

Zum Beispiel gibt dir normalerweise eine Liste zurück, aber abhängig von den Optionen kann es ein einzelnes Objekt zurückgeben. Wenn Sie beabsichtigen, die Ergebnisse mit einem Foreach-Objekt zu durchlaufen, müssen Sie sicherstellen, dass Sie eine Liste zurückbekommen. Hier ist ein konstruiertes Beispiel:

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

Eine weitere Sache ... ein leeres Array (wie eine Variable zu initialisieren) bezeichnet @().

+0

[array] $ eine Syntax ist etwas klarer, visuell, aber guter Tipp. –

85

In PowerShell V2 ist @ auch der SPLAT-Operator.

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 

Experiment! Genießen! Engagieren!

Jeffrey Snover [MSFT] Windows Management Partner Architekt

+1

Ok. Ich könnte die Nichteinhaltung der ECMA-48-Farben dafür verzeihen, denn wow, das ist ziemlich cool. –

+0

Dies ist, was ich gesucht habe: Dieser Operator wird im Kontext splat in Azure Resource Group Deployment-Skripten verwendet. –

22

Während die oben genannten Antworten meisten der Antwort liefern es nützlich ist - auch dies auf die Frage spät - die vollständige Antwort zu geben, nämlich :

Array Unterausdruck (siehe about_arrays)

Kräfte den Wert um ein Array zu sein, auch wenn ein Singleton oder eine null, zB$a = @(ps | where name -like 'foo')

Hash Initialisierer (siehe about_hash_tables)

Initialisiert eine Hash-Tabelle mit Schlüsselwertpaaren, z.B. $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (siehe about_splatting)

Lassen Sie uns Ihnen ein Cmdlet mit Parametern aus einem Array aufrufen oder eine Hash-Tabelle anstatt die üblichen einzeln aufgezählten Parameter, z.B. unter Verwendung der Hash-Tabelle oben, nur Copy-Item @HashArguments

Hier (siehe about_quoting_rules)

Lassen Sie uns Sie Strings mit leicht eingebetteten Anführungszeichen erstellen Strings, in der Regel für mehrzeilige Zeichenketten verwendet werden, zB:

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

Da diese Art von Frage (, was bedeutet 'x'-Notation in PowerShell?) ist hier so häufig auf StackOverflow sowie in vielen Leserkommentare, ich lege ein Lexikon der PowerShell Interpunktion, nur publische d auf Simple-Talk.com. Lesen Sie alles über @ sowie% und # und $ _ und? und mehr unter The Complete Guide to PowerShell Punctuation. An den Artikel angefügt ist diese Wandkarte, die Ihnen alles auf einem einzigen Blatt gibt: enter image description here