(メソッドを呼び出すことによって) Powershell スクリプト ブロックを呼び出すと、.Invoke()
常にコレクションが生成されるようです。具体的には、型のコレクション
System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]
空のスクリプト ブロック ( {}.Invoke()
) を呼び出しても、コレクションが返されます。呼び出し演算子 ( ) を使用して同じスクリプト ブロックを呼び出すと&
、通常期待される戻り値 (スカラーまたは[object[]]
) が生成されます。
これは、配列ではなくコレクションが必要な場合に便利ですが、直感に反するように思えます。
なぜこのように振る舞うのか誰にも分かりますか?
編集:
.Invoke()
2 つの異なる呼び出しがあることと.InvokeReturnAsIs()
、言語仕様を読むことから知っていました。そこで初めて気が付きました。
命名規則の背後にある理由と、その仕組みが機能しているように見える方法がわかりません。ドキュメントを見ると、デフォルトの呼び出し方法だと思っていたのは、スクリプトブロックが Powershell で呼び出されたときに使用されるものではありません。オブジェクトのストリームを返すだけのように見え.InvokeReturnAsIs()
ます。Powershell は、複数のオブジェクトがある場合はオブジェクト配列にラップし、オブジェクトが 1 つしかない場合はスカラーとしてラップします。オブジェクトがない場合は、暗黙的なパイプラインがあるかのように null オブジェクトを作成します。そこの。Using.Invoke()
は常にコレクションを返し、Powershell はそれをコレクションのままにします。