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