Powershellで「@」記号は何をしますか?


112

PowerShellで配列を初期化するために使用される@記号を見てきました。@記号は正確には何を表しており、どこで詳細を読むことができますか?

回答:


81

PowerShellは、実際にはコンマ区切りのリストを配列として扱います。

"server1","server2"

そのため、これらの場合、@はオプションです。ただし、連想配列の場合は@が必要です。

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

公式には、@は「配列演算子」です。詳細については、PowerShellと共にインストールされたドキュメント、または私が共同執筆した「Windows PowerShell:TFM」などの本を参照してください。


12
以下のJeffrey Snoverの回答を確認してください... @は単なる配列識別子ではありません。
Eric Sc​​hoonover、

115

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

1
これは私が探していたものです。この演算子は、Azureリソースグループのデプロイメントスクリプトのスプラットコンテキストで使用されます。
Alex Marshall

57

上記の応答はほとんどの答えを提供しますが、質問の後半でも、完全な答えを提供するために役立ちます。

配列の部分式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つのシートですべてを提供するこのウォールチャートです。 ここに画像の説明を入力してください


@のすべての使用方法について非常に徹底的に説明します。ヒアストリングを探してここに来ました。ありがとうございました!
Nixphoe

27

コマンドレット(またはパイプライン)の出力をラップして、@()返されるものが単一の項目ではなく配列であることを確認することもできます。

たとえば、dirは通常リストを返しますが、オプションによっては単一のオブジェクトを返す場合があります。foreachオブジェクトを使用して結果を反復処理することを計画している場合は、リストを確実に取得する必要があります。これは不自然な例です:

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

もう1つ...空の配列(変数の初期化など)が示され@()ます。


[array] $ a構文は視覚的にはやや明確ですが、良いヒントです。
Don Jones、

7

スプラッティングオペレーター

配列を作成するには、変数を作成して配列を割り当てます。配列は「@」記号で示されます。上記の説明から、配列を使用して複数のリモートコンピューターに接続しましょう。

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

それらは配列とハッシュに使用されます。

PowerShellチュートリアル7:データの蓄積、呼び出し、変更

PowerShellの配列リテラル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.