Pipelining, output, dan iterasi di AWS Tools for PowerShell - AWS Tools for PowerShell

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pipelining, output, dan iterasi di AWS Tools for PowerShell

Pipelining

PowerShell mendorong pengguna untuk menghubungkan cmdlet ke saluran pipa yang mengarahkan output dari satu cmdlet ke input berikutnya. Contoh berikut menunjukkan perilaku ini saat menggunakan AWS Tools for PowerShell. Perintah mendapatkan dan kemudian menghentikan semua EC2 instance Amazon di Wilayah default saat ini.

PS > Get-EC2Instance | Stop-EC2Instance

Keluaran cmdlet

Untuk mendukung pipelining dengan lebih baik, beberapa data dari tanggapan AWS SDK for .NET mungkin dibuang secara default. Output dari AWS Tools for PowerShell cmdlet tidak dibentuk ulang untuk menyertakan respons layanan dan instance hasil sebagai Note properti pada objek koleksi yang dipancarkan. Sebaliknya, untuk panggilan yang memancarkan satu koleksi sebagai output, koleksi sekarang disebutkan ke pipeline. PowerShell Ini berarti bahwa data SDK respons dan hasil tidak dapat ada dalam pipeline karena tidak ada objek koleksi yang dapat dilampirkan.

Meskipun sebagian besar pengguna mungkin tidak memerlukan data ini, ini dapat berguna untuk tujuan diagnostik karena Anda dapat melihat dengan tepat apa yang dikirim dan diterima dari panggilan AWS layanan yang mendasari yang dibuat oleh cmdlet. Dimulai dengan AWS Tools for PowerShell V4, cmdlet dapat menggunakan -Select * parameter dan argumen untuk mengembalikan seluruh respons layanan.

catatan

Dalam versi AWS Tools for PowerShell sebelum V4, variabel sesi yang disebut $AWSHistory diperkenalkan yang menyimpan catatan pemanggilan AWS cmdlet dan respons layanan yang diterima untuk setiap pemanggilan. Di V4 dari Tools for PowerShell, variabel sesi ini tidak digunakan lagi demi -Select * parameter dan argumen, yang dapat digunakan untuk mengembalikan seluruh respons layanan. Parameter ini dijelaskan dalam topik ini.

Ini adalah dokumentasi prarilis untuk fitur dalam rilis pratinjau. Dokumentasi dapat berubah.

$AWSHistoryVariabel akan dihapus di V5 dari file. AWS Tools for PowerShell Untuk informasi lebih lanjut, lihat posting blog Pemberitahuan versi utama 5 AWS Alat yang akan datang untuk PowerShell.

Untuk mengilustrasikan bagaimana semua data dari respons dapat dikembalikan, pertimbangkan contoh berikut.

Contoh pertama hanya mengembalikan daftar ember Amazon S3. Ini adalah perilaku default.

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

Contoh kedua mengembalikan objek AWS SDK for .NET respon. Karena -Select * telah ditentukan, output mencakup seluruh API respons, yang berisi kumpulan ember di Buckets properti. Dalam contoh ini, Format-List cmdlet tidak sepenuhnya diperlukan, tetapi hadir untuk memastikan bahwa semua properti ditampilkan.

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

Iterasi melalui data halaman

Bagian berikut menjelaskan berbagai jenis iterasi yang mungkin.

Iterasi otomatis

Untuk layanan APIs yang memaksakan jumlah maksimum default objek yang dikembalikan untuk panggilan tertentu atau yang mendukung set hasil yang dapat dihalaman, sebagian besar cmdlet menerapkan iterasi otomatis, yang memungkinkan perilaku default "”. page-to-completion Dalam skenario ini, cmdlet membuat panggilan sebanyak yang diperlukan atas nama Anda untuk mengembalikan kumpulan data lengkap ke pipeline.

Dalam contoh berikut, yang menggunakan Get-S3Object cmdlet, $result variabel berisi S3Object instance untuk setiap kunci dalam bucket yang disebutamzn-s3-demo-bucket1, yang berpotensi merupakan kumpulan data yang sangat besar.

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

Contoh berikut mengurangi jumlah hasil untuk setiap halaman selama iterasi otomatis dari nilai default 1000 menjadi 500. Contoh melakukan dua kali lebih banyak panggilan iterasi otomatis karena hanya setengah dari banyak hasil yang dikembalikan untuk setiap panggilan.

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

Di AWS Tools for PowerShell V4, beberapa cmdlet untuk operasi paged tidak menerapkan iterasi otomatis. Jika cmdlet tidak memiliki -NoAutoIteration parameter, yang dibahas di bagian berikutnya, maka cmdlet tidak menerapkan iterasi otomatis.

Nonaktifkan iterasi otomatis

Jika Anda ingin Alat PowerShell untuk mengembalikan hanya halaman pertama data, Anda dapat menambahkan -NoAutoIteration parameter untuk mencegah halaman data tambahan dikembalikan.

Contoh berikut menggunakan -MaxKey parameter -NoAutoIteration and untuk membatasi jumlah S3Object instance yang dikembalikan tidak lebih dari 500 pertama yang ditemukan di bucket.

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

Untuk menentukan apakah lebih banyak data tersedia tetapi tidak dikembalikan, gunakan -Select * parameter dan argumen dan periksa apakah ada nilai di properti token berikutnya.

Contoh berikut kembali $true jika ada lebih dari 500 objek dalam ember dan $false sebaliknya.

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

Nama-nama properti respons token berikutnya dan parameter cmdlet bervariasi di antara cmdlet. Untuk detailnya, lihat dokumentasi bantuan untuk setiap cmdlet.

Iterasi manual

Contoh berikut mengembalikan semua objek S3 dari bucket menggunakan do loop, yang mengevaluasi kondisi setelah setiap iterasi. doLoop melakukan iterasi hingga Get-S3Object set $result.NextMarker ke$null, menunjukkan bahwa tidak ada lagi data halaman yang tersisa. Output dari loop ditugaskan ke $s3Objects variabel.

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

Contoh ini menggunakan PowerShell percikan untuk menghindari baris panjang kode yang akan disebabkan oleh mendeklarasikan parameter dan argumen in-line.