回答:
PowerShellは、実際にはコンマ区切りのリストを配列として扱います。
"server1","server2"
そのため、これらの場合、@はオプションです。ただし、連想配列の場合は@が必要です。
@{"Key"="Value";"Key2"="Value2"}
公式には、@は「配列演算子」です。詳細については、PowerShellと共にインストールされたドキュメント、または私が共同執筆した「Windows PowerShell:TFM」などの本を参照してください。
PowerShell V2では、@は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
上記の応答はほとんどの答えを提供しますが、質問の後半でも、完全な答えを提供するために役立ちます。
配列の部分式(about_arraysを参照)
シングルトンまたはnullの場合でも、値を強制的に配列にします。 $a = @(ps | where name -like 'foo')
ハッシュ初期化子(about_hash_tablesを参照)
キーと値のペアでハッシュテーブルを初期化します。例:
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
スプラッティング(参照about_splatting)
たとえば、上記のハッシュテーブルを使用するなど、より一般的な個別に列挙されたパラメーターではなく、配列またはハッシュテーブルのパラメーターを使用してコマンドレットを呼び出してみましょう。 Copy-Item @HashArguments
ここで文字列(about_quoting_rulesを参照)
簡単に引用符を埋め込んだ文字列を作成してみましょう。通常、複数行の文字列に使用されます。例:
$data = @"
line one
line two
something "quoted" here
"@
この種類の質問(PowerShellでの「x」表記の意味は何ですか?)は、ここStackOverflowと多くの読者のコメントで非常に一般的であるため、Simple-Talk.comで公開されたPowerShell句読点の用語集をまとめました。@、%、#、$ _、および?のすべてをお読みください。詳細については、PowerShell句読点の完全ガイドをご覧ください。記事に添付されているのは、1つのシートですべてを提供するこのウォールチャートです。
コマンドレット(またはパイプライン)の出力をラップして、@()
返されるものが単一の項目ではなく配列であることを確認することもできます。
たとえば、dirは通常リストを返しますが、オプションによっては単一のオブジェクトを返す場合があります。foreachオブジェクトを使用して結果を反復処理することを計画している場合は、リストを確実に取得する必要があります。これは不自然な例です:
$results = @( dir c:\autoexec.bat)
もう1つ...空の配列(変数の初期化など)が示され@()
ます。
スプラッティングオペレーター
配列を作成するには、変数を作成して配列を割り当てます。配列は「@」記号で示されます。上記の説明から、配列を使用して複数のリモートコンピューターに接続しましょう。
$strComputers = @("Server1", "Server2", "Server3")<enter>
それらは配列とハッシュに使用されます。