

のバージョン 5 (V5) AWS Tools for PowerShell がリリースされました。

重要な変更とアプリケーションの移行については、[「移行トピック](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html)」を参照してください。

 [https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html)

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

# でのパイプライン、出力、およびイテレーション AWS Tools for PowerShell
<a name="pstools-pipelines"></a>

## パイプライン
<a name="pstools-pipelining"></a>

PowerShell では、1 つのコマンドレットの出力を次のコマンドレットの入力に誘導する[パイプライン](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipelines)にコマンドレットを接続することをユーザーにお勧めします。次の例は、 を使用する場合のこの動作を示しています AWS Tools for PowerShell。コマンドは、現在のデフォルトリージョン内のすべての Amazon EC2 インスタンスを取得して停止します。

```
PS > Get-EC2Instance | Stop-EC2Instance
```

## コマンドレット出力
<a name="pstools-output"></a>

パイプライン処理をより適切にサポートするために、 のレスポンスの一部のデータはデフォルトで破棄 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
```

## ページ分割されたデータによる反復処理
<a name="pstools-iteration"></a>

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

### 自動イテレーション
<a name="pstools-iteration-auto"></a>

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

Get[Get-S3Object](https://docs.aws.amazon.com/powershell/v5/reference/index.html?page=Get-S3Object.html&tocid=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
```

### 自動反復を無効にする
<a name="pstools-iteration-disable-auto"></a>

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
```

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

### 手動イテレーション
<a name="pstools-iteration-manual"></a>

次の例では、各反復後に条件を評価する [do](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_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 [スプラッティング](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting)を使用して、パラメータと引数のインライン宣言によって引き起こされるコードの長い行を回避します。