Pipelining, saída e iteração no Ferramentas da AWS para PowerShell - Ferramentas da AWS para PowerShell

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Pipelining, saída e iteração no Ferramentas da AWS para PowerShell

Tubulação

PowerShell incentiva os usuários a conectar cmdlets em pipelines que direcionam a saída de um cmdlet para a entrada do próximo. O exemplo a seguir mostra esse comportamento ao usar Ferramentas da AWS para PowerShell o. O comando obtém e interrompe todas as EC2 instâncias da Amazon na região padrão atual.

PS > Get-EC2Instance | Stop-EC2Instance

Saída de cmdlet

Para oferecer melhor suporte ao pipeline, alguns dados das respostas do AWS SDK for .NET podem ser descartados por padrão. A saída dos Ferramentas da AWS para PowerShell cmdlets não foi remodelada para incluir as instâncias de resposta e resultado do serviço como Note propriedades no objeto de coleção emitido. Em vez disso, para as chamadas que emitem uma única coleção como saída, a coleção agora é enumerada no pipeline. PowerShell Isso significa que os dados de resposta e resultado do SDK não podem existir no pipeline porque não há nenhum objeto de coleção contido ao qual possam ser anexados.

Embora a maioria dos usuários provavelmente não precise desses dados, eles podem ser úteis para fins de diagnóstico, pois você pode ver exatamente o que foi enviado e recebido das chamadas de AWS serviço subjacentes feitas pelo cmdlet. A partir da Ferramentas da AWS para PowerShell V4, os cmdlets podem usar o -Select * parâmetro e o argumento para retornar toda a resposta do serviço.

nota

Nas versões Ferramentas da AWS para PowerShell anteriores à V4, $AWSHistory foi introduzida uma variável de sessão chamada que mantém um registro das invocações de AWS cmdlet e das respostas de serviço recebidas para cada invocação. Na V4 do Tools for PowerShell, essa variável de sessão foi descontinuada em favor do -Select * parâmetro e do argumento, que podem ser usados para retornar toda a resposta do serviço. Esse parâmetro é descrito neste tópico.

nota

Esta é uma documentação de pré-lançamento de um recurso em versão de pré-visualização. Está sujeita a alteração.

A $AWSHistory variável será removida na V5 do Ferramentas da AWS para PowerShell. Para obter mais informações, consulte a postagem do blog Aviso sobre a próxima versão principal 5 do AWS Tools for PowerShell.

Para ilustrar como todos os dados de uma resposta podem ser retornados, considere os exemplos a seguir.

O primeiro exemplo simplesmente retorna uma lista de buckets do Amazon S3. Esse é o comportamento padrão.

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

O segundo exemplo retorna um objeto de AWS SDK for .NET resposta. Como -Select * foi especificada, a saída inclui toda a resposta da API, que contém a coleção de buckets na Buckets propriedade. Neste exemplo, o Format-List cmdlet não é estritamente necessário, mas está presente para garantir que todas as propriedades sejam exibidas.

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

Iteração por meio de dados paginados

As seções a seguir descrevem vários tipos de iteração que são possíveis.

Iteração automática

Para serviços APIs que impõem um número máximo padrão de objetos retornados para uma determinada chamada ou que oferecem suporte a conjuntos de resultados pagináveis, a maioria dos cmdlets implementa a iteração automática, o que permite o comportamento padrão de "”. page-to-completion Nesse cenário, um cmdlet faz quantas chamadas forem necessárias em seu nome para retornar o conjunto de dados completo ao pipeline.

No exemplo a seguir, que usa o Get-S3Object cmdlet, a $result variável contém S3Object instâncias para cada chave em um bucket chamadoamzn-s3-demo-bucket1, que é potencialmente um conjunto de dados muito grande.

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

O exemplo a seguir reduz o número de resultados de cada página durante a iteração automática do valor padrão de 1000 para 500. O exemplo executa o dobro de chamadas de iteração automática porque somente metade dos resultados são retornados para cada chamada.

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

Na Ferramentas da AWS para PowerShell V4, alguns cmdlets para operações paginadas não implementam a iteração automática. Se um cmdlet não tiver o -NoAutoIteration parâmetro, que será discutido na próxima seção, ele não implementará a iteração automática.

Desativar a iteração automática

Se quiser que as Ferramentas PowerShell para retornem somente a primeira página de dados, você pode adicionar o -NoAutoIteration parâmetro para evitar que páginas adicionais de dados sejam retornadas.

O exemplo a seguir usa os -MaxKey parâmetros -NoAutoIteration e para limitar o número de S3Object instâncias retornadas a não mais do que as primeiras 500 encontradas no bucket.

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

Para determinar se mais dados estavam disponíveis, mas não foram retornados, use o -Select * parâmetro e o argumento e verifique se há um valor na próxima propriedade do token.

O exemplo a seguir retorna $true se há mais de 500 objetos no bucket e de $false outra forma.

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

Os nomes da próxima propriedade de resposta do token e do parâmetro do cmdlet variam entre os cmdlets. Para obter detalhes, consulte a documentação de ajuda de cada cmdlet.

Iteração manual

O exemplo a seguir retorna todos os objetos do S3 de um bucket usando um loop do, que avalia a condição após cada iteração. O do loop executa iterações até $result.NextMarker ser Get-S3Object definido como$null, indicando que não há mais dados paginados. A saída do loop é atribuída à $s3Objects variável.

$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)

Este exemplo usa PowerShell splatting para evitar uma longa linha de código que seria causada pela declaração de parâmetros e argumentos em linha.