AWS Tools for PowerShell의 파이프라이닝, 출력 및 반복 - AWS Tools for PowerShell (버전 4)

버전 5(V5) AWS Tools for PowerShell 가 릴리스되었습니다.

새 버전의 도구 사용을 시작하려면 AWS Tools for PowerShell 사용 설명서(V5), 특히 V5로 마이그레이션 주제를 참조하세요.

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

AWS Tools for PowerShell의 파이프라이닝, 출력 및 반복

파이프라이닝

PowerShell은 사용자가 한 cmdlet의 출력을 다음 cmdlet의 입력으로 보내는 파이프라인에 cmdlet을 연결하도록 권장합니다. 다음 예에서는 AWS Tools for PowerShell을 사용하여 이 작업을 수행하는 방법을 보여줍니다. 명령은 현재 기본 리전의 모든 Amazon EC2 인스턴스를 가져온 다음 중지합니다.

PS > Get-EC2Instance | Stop-EC2Instance

Cmdlet 출력

파이프라이닝을 더 잘 지원하기 위해 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 공지를 참조하세요.

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

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

페이징된 데이터를 통한 반복

다음 섹션에서는 가능한 다양한 유형의 반복에 대해 설명합니다.

자동 반복

지정된 호출에 대해 반환된 객체의 기본 최대 수를 부과하거나 페이지 지정 가능한 결과 세트를 지원하는 서비스 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 파라미터가 없는 경우 자동 반복을 구현하지 않습니다.

자동 반복 비활성화

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에 대한 도움말 설명서를 참조하세요.

수동 반복

다음 예제에서는 각 반복 후 조건을 평가하는 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 스플래팅을 사용하여 파라미터와 인수를 인라인으로 선언하여 발생하는 긴 코드 줄을 방지합니다.