

AWS Tools for PowerShell V4가 유지 관리 모드로 전환되었습니다.

[AWS Tools for PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/)로 마이그레이션하는 것이 좋습니다. 마이그레이션 방법에 대한 자세한 내용과 정보는 [유지 관리 모드 공지](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/)를 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Tools for PowerShell의 파이프라이닝, 출력 및 반복
<a name="pstools-pipelines"></a>

## 파이프라이닝
<a name="pstools-pipelining"></a>

PowerShell은 사용자가 한 cmdlet의 출력을 다음 cmdlet의 입력으로 보내는 [파이프라인](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipelines)에 cmdlet을 연결하도록 권장합니다. 다음 예에서는 AWS Tools for PowerShell을 사용하여 이 작업을 수행하는 방법을 보여줍니다. 명령은 현재 기본 리전의 모든 Amazon EC2 인스턴스를 가져온 다음 중지합니다.

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

## Cmdlet 출력
<a name="pstools-output"></a>

파이프라이닝을 더 잘 지원하기 위해 AWS SDK for .NET의 응답에서 일부 데이터가 기본적으로 삭제될 수 있습니다. AWS Tools for PowerShell cmdlet의 출력은 방출된 컬렉션 객체의 `Note` 속성으로서 서비스 응답 및 결과 인스턴스를 포함하도록 더 이상 변경되지 않습니다. 대신에, 단일 모음을 출력으로 내보내는 이러한 호출의 경우, 모음이 이제 PowerShell 파이프라인에 열거됩니다. 다시 말해서 연결할 수 있는 모음 객체를 포함하지 않기 때문에 SDK 응답과 결과 데이터가 파이프라인에 존재할 수 없다는 뜻입니다.

대부분의 사용자에게는 이 데이터가 필요하지 않겠지만, cmdlet에서 수행된 기본 AWS 서비스 호출로부터 보내고 받은 내용을 정확히 알 수 있으므로 진단 목적으로 유용할 수 있습니다. AWS Tools for PowerShell V4부터 cmdlet은 `-Select *` 파라미터와 인수를 사용하여 전체 서비스 응답을 반환할 수 있습니다.

**참고**  
V4 이전의 AWS Tools for PowerShell 버전에서는 AWS cmdlet 간접 호출 및 각 간접 호출에 대해 수신된 서비스 응답의 기록을 유지하는 `$AWSHistory`라는 세션 변수가 도입되었습니다. Tools for PowerShell의 V4에서는 이 세션 변수가 전체 서비스 응답을 반환하는 데 사용될 수 있는 `-Select *` 파라미터 및 인수를 위해 더 이상 사용되지 않습니다. 이 파라미터는 이 주제에 설명되어 있습니다.  
이 시험판 설명서는 미리 보기 릴리스의 기능에 관한 것입니다. 변경될 수 있습니다.
`$AWSHistory` 변수는 AWS Tools for PowerShell의 V5에서 제거됩니다. 자세한 내용은 블로그 게시물 [AWS Tools for PowerShell의 예정된 메이저 버전 5 공지](https://aws.amazon.com/blogs/developer/notice-of-upcoming-major-version-5-of-aws-tools-for-powershell/)를 참조하세요.

응답의 모든 데이터를 반환하는 방법을 설명하려면 다음 예제를 고려하세요.

첫 번째 예제에서는 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
```

두 번째 예제에서는 AWS SDK for .NET 응답 객체를 반환합니다. `-Select *`가 지정되었으므로 출력에는 `Buckets` 속성의 버킷 모음을 포함하는 전체 API 응답이 포함됩니다. 이 예제에서는 `Format-List` cmdlet이 반드시 필요한 것은 아니지만 모든 속성이 표시되도록 하기 위해 존재합니다.

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

지정된 호출에 대해 반환된 객체의 기본 최대 수를 부과하거나 페이지 지정 가능한 결과 세트를 지원하는 서비스 API의 경우 대부분의 cmdlet은 자동 반복을 구현하여 기본 동작인 "page-to-completion"을 활성화합니다. 이 시나리오 에서 cmdlet은 전체 데이터 세트를 파이프라인으로 반환하기 위해 사용자를 대신하여 필요한 만큼 호출합니다.

`Get-S3Object` cmdlet을 사용하는 다음 예제에서는 `$result` 변수가 `amzn-s3-demo-bucket1`이라는 버킷(잠재적으로 매우 큰 데이터 세트)의 모든 키에 대한 `S3Object` 인스턴스를 포함합니다.

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

다음 예제에서는 자동 반복 중 각 페이지의 결과 수를 기본값인 1000에서 500으로 줄입니다. 이 예제에서는 각 호출에 대해 반환되는 결과가 절반에 불과하므로 자동 반복 직접 호출을 두 배로 수행합니다.

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

**참고**  
AWS Tools for PowerShell V4에서 호출된 작업에 대한 일부 cmdlet은 자동 반복을 구현하지 않습니다. cmdlet에 다음 섹션에서 설명하는 `-NoAutoIteration` 파라미터가 없는 경우 자동 반복을 구현하지 않습니다.

### 자동 반복 비활성화
<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 *` 파라미터와 인수를 사용하고 다음 토큰 속성에 값이 있는지 확인합니다.

다음 예제에서는 버킷에 500를 초과하는 객체가 있는 경우 `$true`를 반환하고 그렇지 않은 경우 `$false`를 반환합니다.

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

**참고**  
다음 토큰 응답 속성과 cmdlet 파라미터의 이름은 cmdlet마다 다릅니다. 자세한 내용은 각 cmdlet에 대한 도움말 설명서를 참조하세요.

### 수동 반복
<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)을 사용하여 파라미터와 인수를 인라인으로 선언하여 발생하는 긴 코드 줄을 방지합니다.