Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Pipelining, sortie et itération dans le AWS Tools for PowerShell
Pipeline
PowerShell encourage les utilisateurs à connecter les applets de commande à des pipelines
PS >
Get-EC2Instance | Stop-EC2Instance
Sortie de l'applet de commande
Pour mieux prendre en charge le pipeline, certaines données issues des réponses du AWS SDK for .NET peuvent être supprimées par défaut. La sortie des AWS Tools for PowerShell applets de commande n'est pas remodelée pour inclure la réponse du service et les instances de résultat en tant que Note
propriétés de l'objet de collection émis. Au lieu de cela, pour les appels qui émettent une seule collection en sortie, la collection est désormais énumérée dans le PowerShell pipeline. Cela signifie que les données de SDK réponse et de résultat ne peuvent pas exister dans le pipeline car il n'existe aucun objet de collection contenant auquel elles peuvent être attachées.
Bien que la plupart des utilisateurs n'aient probablement pas besoin de ces données, elles peuvent être utiles à des fins de diagnostic, car vous pouvez voir exactement ce qui a été envoyé et reçu par les appels de AWS service sous-jacents effectués par l'applet de commande. À partir de la AWS Tools for PowerShell version 4, les applets de commande peuvent utiliser le -Select *
paramètre et l'argument pour renvoyer la réponse complète du service.
Note
Dans les versions AWS Tools for PowerShell antérieures à la V4, une variable de session appelée $AWSHistory
a été introduite pour conserver un enregistrement des appels d' AWS applets de commande et des réponses de service reçues pour chaque appel. Dans la version 4 des outils pour PowerShell, cette variable de session était obsolète au profit du -Select *
paramètre et de l'argument, qui peuvent être utilisés pour renvoyer la réponse complète du service. Ce paramètre est décrit dans cette rubrique.
Il s'agit de la documentation d'avant-première d'une fonctionnalité en version préliminaire. Elle est susceptible d’être modifiée. |
La $AWSHistory
variable sera supprimée dans la version 5 du AWS Tools for PowerShell. Pour plus d'informations, consultez le billet de blog Notice of coming major version 5 de AWS Tools for PowerShell
Pour illustrer comment toutes les données d'une réponse peuvent être renvoyées, considérez les exemples suivants.
Le premier exemple renvoie simplement une liste de compartiments Amazon S3. Il s'agit du comportement de par défaut.
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
Le deuxième exemple renvoie un objet de AWS SDK for .NET réponse. Comme elle -Select *
a été spécifiée, la sortie inclut l'intégralité de la API réponse, qui contient l'ensemble des compartiments de la Buckets
propriété. Dans cet exemple, l'Format-List
applet de commande n'est pas strictement nécessaire, mais elle est présente pour garantir que toutes les propriétés sont affichées.
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
Itération via des données paginées
Les sections suivantes décrivent les différents types d'itérations possibles.
Itération automatique
Pour les services APIs qui imposent un nombre maximum d'objets renvoyés par défaut pour un appel donné ou qui prennent en charge les ensembles de résultats consultables, la plupart des applets de commande implémentent l'itération automatique, qui active le comportement par défaut de « ». page-to-completion Dans ce scénario, une applet de commande effectue autant d'appels que nécessaire en votre nom pour renvoyer l'ensemble de données complet au pipeline.
Dans l'exemple suivant, qui utilise l'Get-S3Object
applet de commande, la $result
variable contient des S3Object
instances pour chaque clé d'un bucket appeléamzn-s3-demo-bucket1
, qui est potentiellement un ensemble de données très volumineux.
PS >
$result = Get-S3Object -BucketName amzn-s3-demo-bucket1
L'exemple suivant réduit le nombre de résultats pour chaque page pendant l'itération automatique de la valeur par défaut de 1 000 à 500. L'exemple exécute deux fois plus d'appels d'itération automatique, car chaque appel renvoie deux fois moins de résultats.
PS >
$result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500
Note
Dans la version AWS Tools for PowerShell 4, certaines applets de commande pour les opérations de pagination n'implémentent pas l'itération automatique. Si une applet de commande ne possède pas le -NoAutoIteration
paramètre, comme indiqué dans la section suivante, elle n'implémente pas l'itération automatique.
Désactiver l'itération automatique
Si vous souhaitez que les outils PowerShell pour ne renvoient que la première page de données, vous pouvez ajouter le -NoAutoIteration
paramètre pour empêcher le renvoi de pages de données supplémentaires.
L'exemple suivant utilise les -MaxKey
paramètres -NoAutoIteration
et pour limiter le nombre d'S3Object
instances renvoyées à un maximum de 500 instances trouvées dans le compartiment.
PS >
$result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500 -NoAutoIteration
Pour déterminer si d'autres données étaient disponibles mais n'ont pas été renvoyées, utilisez le -Select *
paramètre et l'argument et vérifiez si la propriété du jeton suivant contient une valeur.
L'exemple suivant indique $true
s'il y a plus de 500 objets dans le compartiment et $false
sinon.
PS >
$result = Get-S3Object -BucketName amzn-s3-demo-bucket1 -MaxKey 500 -NoAutoIteration -Select *
PS >
$null -eq $result.NextMarker
Note
Les noms de la propriété de réponse du jeton et du paramètre de l'applet de commande suivants varient selon les applets de commande. Pour plus de détails, consultez la documentation d'aide de chaque applet de commande.
Itération manuelle
L'exemple suivant renvoie tous les objets S3 d'un compartiment à l'aide d'une boucle dodo
boucle effectue des itérations jusqu'à ce qu'elle soit Get-S3Object
définie $result.NextMarker
sur$null
, ce qui indique qu'il ne reste plus de données paginées. La sortie de la boucle est affectée à la $s3Objects
variable.
$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)
Cet exemple utilise le PowerShell splatting