でのパイプライン、出力、および反復 AWS Tools for PowerShell - AWS Tools for PowerShell (バージョン 5 プレビュー)

AWS Tools for PowerShell バージョン 5 (V5) はプレビュー版であるため、このコンテンツは変更される可能性があります。重大な変更、インストール、移行については、移行トピックを参照してください。リリースされたコンテンツについては、代わりにバージョン 4 ユーザーガイドを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

でのパイプライン、出力、および反復 AWS Tools for PowerShell

パイプライン

PowerShell では、1 つのコマンドレットの出力を次のコマンドレットの入力に誘導するパイプラインにコマンドレットを接続することをユーザーにお勧めします。次の例は、 を使用する場合のこの動作を示しています AWS Tools for PowerShell。コマンドは、現在のデフォルトリージョン内のすべての Amazon EC2 インスタンスを取得して停止します。

PS > Get-EC2Instance | Stop-EC2Instance

コマンドレット出力

パイプライン処理をより適切にサポートするために、 のレスポンスの一部のデータはデフォルトで破棄 AWS SDK for .NET される場合があります。 AWS Tools for PowerShell コマンドレットからの出力は、出力されたコレクションオブジェクトのNoteプロパティとしてサービスレスポンスと結果インスタンスを含めるように再形成されません。代わりに、出力として単一のコレクションを送信する呼び出しについては、コレクションが PowerShell パイプラインに列挙されるようになりました。つまり、SDK レスポンスと結果データは、アタッチできるコレクションオブジェクトが含まれていないため、パイプラインに存在できません。

ほとんどのユーザーはおそらくこのデータを必要としませんが、 コマンドレットによって行われた基盤となる AWS サービス呼び出しとの間で送受信された内容を正確に確認できるため、診断目的で役立ちます。コマンドレットは、 -Select *パラメータと 引数を使用してサービスレスポンス全体を返すことができます。

レスポンスのすべてのデータを返す方法を説明するために、次の例を検討してください。

最初の例では、Amazon S3 バケットのリストを返します。これがデフォルトの動作です。

PS > Get-S3Bucket CreationDate BucketName ------------ ---------- 9/22/2023 10:54:35 PM amzn-s3-demo-bucket1 9/22/2023 11:04:37 AM amzn-s3-demo-bucket2 9/22/2023 12:54:34 PM amzn-s3-demo-bucket3

2 番目の例では、 AWS SDK for .NET レスポンスオブジェクトを返します。-Select * が指定されているため、出力には API レスポンス全体が含まれ、これには Bucketsプロパティ内のバケットのコレクションが含まれます。この例では、Format-Listコマンドレットは必須ではありませんが、すべてのプロパティが表示されるように存在します。

PS > Get-S3Bucket -Select * | Format-List LoggedAt : 10/1/2023 9:45:52 AM Buckets : {amzn-s3-demo-bucket1, amzn-s3-demo-bucket2, amzn-s3-demo-bucket3} Owner : Amazon.S3.Model.Owner ContinuationToken : ResponseMetadata : Amazon.Runtime.ResponseMetadata ContentLength : 0 HttpStatusCode : OK

ページ分割されたデータによる反復処理

以下のセクションでは、可能なさまざまなタイプの反復について説明します。

自動イテレーション

特定の呼び出しに対して返されるオブジェクトのデフォルトの最大数を課すサービス APIs、またはページ分割可能な結果セットをサポートするサービス API の場合、ほとんどのコマンドレットは自動反復を実装し、page-to-completion」のデフォルトの動作を有効にします。このシナリオでは、コマンドレットはユーザーに代わって必要な数だけ呼び出しを行い、完全なデータセットをパイプラインに返します。

コマンドGet-S3Objectレットを使用する次の例では、 $result変数に という名前のバケット内のすべてのキーのS3Objectインスタンスが含まれています。これはamzn-s3-demo-bucket1、非常に大きなデータセットである可能性があります。

PS > $result = Get-S3Object -BucketName amzn-s3-demo-bucket1

次の例では、自動反復中の各ページの結果の数をデフォルト値の 1000 から 500 に減らします。この例では、自動反復呼び出しの 2 倍の数を実行します。これは、呼び出しごとに返される結果の数は半分に過ぎないためです。

PS > $result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500
注記

ページ分割オペレーションのコマンドレットの中には、自動反復を実装しないものがあります。コマンドレットに次のセクションで説明する -NoAutoIterationパラメータがない場合、自動反復は実装されません。

自動反復を無効にする

Tools for PowerShell がデータの最初のページのみを返すようにする場合は、 -NoAutoIterationパラメータを追加して、データの追加ページが返されないようにできます。

次の例では、 -NoAutoIterationおよび -MaxKeyパラメータを使用して、返されるS3Objectインスタンスの数をバケット内の最初の 500 個以下に制限します。

PS > $result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500 -NoAutoIteration

より多くのデータが使用可能で返されなかったかどうかを判断するには、 -Select *パラメータと 引数を使用して、次のトークンプロパティに値があるかどうかを確認します。

次の例では$true、バケットに 500 個を超えるオブジェクトがある場合は を返します。$falseそれ以外の場合は を返します。

PS > $result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500 -NoAutoIteration -Select * PS > $null -eq $result.NextMarker
注記

次のトークンレスポンスプロパティとコマンドレットパラメータの名前は、コマンドレットによって異なります。詳細については、各コマンドレットのヘルプドキュメントを参照してください。

手動イテレーション

次の例では、各反復後に条件を評価する do ループを使用してバケットからすべての S3 オブジェクトを返します。do ループは、 Get-S3Object$result.NextMarkerに設定されるまで反復を実行し$null、ページ分割されたデータが残っていないことを示します。ループの出力は $s3Objects変数に割り当てられます。

$s3Objects = do { $splatParams = @{ BucketName = 'amzn-s3-demo-bucket1' MaxKey = 500 Marker = $result.NextMarker NoAutoIteration = $true Select = '*' } $result = Get-S3Object @splatParams $result.S3Objects } while ($null -ne $result.NextMarker)

この例では、PowerShell スプラッティングを使用して、パラメータと引数のインライン宣言によって引き起こされるコードの長い行を回避します。