Pipelining, Ausgabe und Iteration in der AWS Tools for PowerShell - AWS Tools for PowerShell

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Pipelining, Ausgabe und Iteration in der AWS Tools for PowerShell

Pipelining

PowerShell ermutigt Benutzer, Cmdlets mit Pipelines zu verbinden, die die Ausgabe eines Cmdlets in die Eingabe des nächsten weiterleiten. Das folgende Beispiel zeigt dieses Verhalten bei der Verwendung von. AWS Tools for PowerShell Der Befehl ruft alle EC2 Amazon-Instances in der aktuellen Standardregion ab und stoppt sie dann.

PS > Get-EC2Instance | Stop-EC2Instance

Cmdlet-Ausgabe

Um das Pipelining besser zu unterstützen, werden einige Daten aus den Antworten von AWS SDK for .NET möglicherweise standardmäßig verworfen. Die Ausgabe von AWS Tools for PowerShell Cmdlets wird nicht so umgestaltet, dass sie die Dienstantwort und die Ergebnisinstanzen als Note Eigenschaften für das ausgegebene Auflistungsobjekt enthält. Stattdessen wird bei Aufrufen, die eine einzelne Sammlung als Ausgabe ausgeben, die Sammlung nun in der Pipeline aufgezählt. PowerShell Das bedeutet, dass die SDK Antwort- und Ergebnisdaten nicht in der Pipeline existieren können, da es kein enthaltendes Sammlungsobjekt gibt, an das sie angehängt werden können.

Obwohl die meisten Benutzer diese Daten wahrscheinlich nicht benötigen, können sie für Diagnosezwecke nützlich sein, da Sie genau sehen können, was an die zugrunde liegenden AWS Serviceanfragen gesendet und von ihnen empfangen wurde, die vom Cmdlet getätigt wurden. Ab Version AWS Tools for PowerShell 4 können Cmdlets den -Select * Parameter und das Argument verwenden, um die gesamte Dienstantwort zurückzugeben.

Anmerkung

In Versionen AWS Tools for PowerShell vor V4 $AWSHistory wurde eine Sitzungsvariable namens eingeführt, die eine Aufzeichnung der AWS Cmdlet-Aufrufe und der Dienstantworten verwaltet, die für jeden Aufruf empfangen wurden. In Version 4 der Tools for PowerShell wurde diese Sitzungsvariable zugunsten des -Select * Parameters und des Arguments, mit denen die gesamte Dienstantwort zurückgegeben werden kann, als veraltet eingestuft. Dieser Parameter wird in diesem Thema beschrieben.

Dies ist eine Vorabveröffentlichungsdokumentation für eine Funktion in der Vorabversion. Änderungen sind vorbehalten.

Die $AWSHistory Variable wird in Version 5 von entfernt. AWS Tools for PowerShell Weitere Informationen finden Sie im Blogbeitrag Hinweis auf die bevorstehende Hauptversion 5 von AWS Tools for PowerShell.

Sehen Sie sich die folgenden Beispiele an, um zu veranschaulichen, wie alle Daten aus einer Antwort zurückgegeben werden können.

Das erste Beispiel gibt einfach eine Liste von Amazon S3 S3-Buckets zurück. Dies ist das Standardverhalten.

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

Das zweite Beispiel gibt ein AWS SDK for .NET Antwortobjekt zurück. Da angegeben -Select * wurde, umfasst die Ausgabe die gesamte API Antwort, die die Sammlung von Buckets in der Buckets Eigenschaft enthält. In diesem Beispiel ist das Format-List Cmdlet nicht unbedingt erforderlich, aber es ist vorhanden, um sicherzustellen, dass alle Eigenschaften angezeigt werden.

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

Iteration durch seitenweise gespeicherte Daten

In den folgenden Abschnitten werden verschiedene Arten von Iterationen beschrieben, die möglich sind.

Automatische Iteration

Für DiensteAPIs, die eine standardmäßige maximale Anzahl zurückgegebener Objekte für einen bestimmten Aufruf festlegen oder Ergebnismengen unterstützen, implementieren die meisten Cmdlets die automatische Iteration, wodurch das Standardverhalten von "" aktiviert wird. page-to-completion In diesem Szenario führt ein Cmdlet in Ihrem Namen so viele Aufrufe durch, wie erforderlich sind, um den vollständigen Datensatz an die Pipeline zurückzugeben.

Im folgenden Beispiel, in dem das Get-S3Object Cmdlet verwendet wird, enthält die $result Variable S3Object Instanzen für jeden Schlüssel in einem aufgerufenen Bucketamzn-s3-demo-bucket1, bei dem es sich möglicherweise um einen sehr großen Datensatz handelt.

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

Im folgenden Beispiel wird die Anzahl der Ergebnisse für jede Seite während der automatischen Iteration vom Standardwert 1000 auf 500 reduziert. In diesem Beispiel werden doppelt so viele automatische Iterationsaufrufe ausgeführt, da bei jedem Aufruf nur halb so viele Ergebnisse zurückgegeben werden.

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

In Version AWS Tools for PowerShell 4 implementieren einige Cmdlets für Seitenoperationen keine automatische Iteration. Wenn ein Cmdlet nicht über den -NoAutoIteration Parameter verfügt, auf den im nächsten Abschnitt eingegangen wird, implementiert es keine automatische Iteration.

Deaktivieren Sie die automatische Iteration

Wenn Sie möchten, dass die Tools für PowerShell nur die erste Datenseite zurückgeben, können Sie den -NoAutoIteration Parameter hinzufügen, um zu verhindern, dass weitere Datenseiten zurückgegeben werden.

Das folgende Beispiel verwendet die -MaxKey Parameter -NoAutoIteration und, um die Anzahl der zurückgegebenen S3Object Instanzen auf nicht mehr als die ersten 500 im Bucket zu beschränken.

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

Um festzustellen, ob weitere Daten verfügbar, aber nicht zurückgegeben wurden, verwenden Sie den -Select * Parameter und das Argument und überprüfen Sie, ob die nächste Token-Eigenschaft einen Wert enthält.

Das folgende Beispiel gibt zurück$true, ob sich mehr als 500 Objekte im Bucket befinden, und $false andernfalls.

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

Die Namen der nächsten Token-Antworteigenschaft und des nächsten Cmdlet-Parameters variieren je nach Cmdlet. Einzelheiten finden Sie in der Hilfedokumentation zu den einzelnen Cmdlets.

Manuelle Iteration

Im folgenden Beispiel werden alle S3-Objekte aus einem Bucket mithilfe einer Do-Schleife zurückgegeben, die die Bedingung nach jeder Iteration auswertet. Die do Schleife führt Iterationen durch, bis der Wert $result.NextMarker auf Get-S3Object 0 gesetzt ist$null, was bedeutet, dass keine ausgelagerten Daten mehr übrig sind. Die Ausgabe der Schleife wird der Variablen zugewiesen. $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)

In diesem Beispiel wird PowerShell Splatting verwendet, um eine lange Codezeile zu vermeiden, die durch die Inline-Deklaration von Parametern und Argumenten verursacht würde.