

Alat AWS untuk PowerShell V4 telah memasuki mode pemeliharaan.

Kami menyarankan Anda bermigrasi ke [Alat AWS untuk PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/). Untuk detail dan informasi tambahan tentang cara bermigrasi, silakan lihat [pengumuman mode pemeliharaan](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/) kami.

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

# Migrasi dari Alat AWS untuk PowerShell Versi 3.3 ke Versi 4
<a name="v4migration"></a>

Alat AWS untuk PowerShell versi 4 adalah pembaruan yang kompatibel ke belakang ke Alat AWS untuk PowerShell versi 3.3. Versi ini menambahkan perbaikan yang signifikan dengan tetap mempertahankan perilaku cmdlet yang ada. 

Skrip Anda yang ada harus terus bekerja setelah diperbarui ke versi baru, tetapi kami rekomendasikan Anda mengujinya secara menyeluruh sebelum memperbarui lingkungan produksi Anda.

Bagian ini menjelaskan perubahan dan menjelaskan bagaimana kemungkinan dampaknya terhadap skrip Anda.

## Versi `AWS.Tools` Baru yang Sepenuhnya Termodulasi
<a name="migrate-aws-tools"></a>

 AWSPowerCangkangnya. NetCore dan paket AWSPower Shell adalah “monolitik”. Ini berarti bahwa semua AWS layanan didukung dalam modul yang sama, membuatnya sangat besar, dan tumbuh lebih besar karena setiap AWS layanan dan fitur baru ditambahkan. `AWS.Tools`Paket baru dipecah menjadi modul yang lebih kecil yang memberi Anda fleksibilitas untuk mengunduh dan menginstal hanya yang Anda butuhkan untuk AWS layanan yang Anda gunakan. Paket termasuk modul `AWS.Tools.Common` bersama yang diperlukan oleh semua modul lainnya, dan modul `AWS.Tools.Installer` yang menyederhanakan pemasangan, pembaruan, dan penghapusan modul sesuai kebutuhan.

Hal ini juga memungkinkan pengimporan otomatis cmdlet pada panggilan pertama, tanpa harus terlebih dulu memanggil `Import-module`. Namun, untuk berinteraksi dengan objek.NET terkait sebelum memanggil cmdlet, Anda tetap harus menelepon `Import-Module` untuk memberi PowerShell tahu tentang jenis.NET yang relevan. 

Misalnya, perintah berikut memiliki referensi ke `Amazon.EC2.Model.Filter`. Jenis referensi ini tidak dapat memicu pengimporan otomatis, jadi Anda harus terlebih dulu memanggil `Import-Module` atau perintah ini akan gagal.

```
PS > $filter = [Amazon.EC2.Model.Filter]@{Name="vpc-id";Values="vpc-1234abcd"}
  InvalidOperation: Unable to find type [Amazon.EC2.Model.Filter].
```

```
PS > Import-Module AWS.Tools.EC2
PS > $filter = [Amazon.EC2.Model.Filter]@{Name="vpc-id";Values="vpc-1234abcd"}
PS > Get-EC2Instance -Filter $filter -Select Reservations.Instances.InstanceId
  i-0123456789abcdefg
  i-0123456789hijklmn
```

## Cmdlet `Get-AWSService` baru
<a name="migrate-get-awsservice"></a>

Untuk membantu Anda menemukan nama-nama modul untuk setiap AWS layanan dalam `AWS.Tools` kumpulan modul, Anda dapat menggunakan `Get-AWSService` cmdlet.

```
PS > Get-AWSService
  Service : ACMPCA
  CmdletNounPrefix : PCA
  ModuleName : AWS.Tools.ACMPCA
  SDKAssemblyVersion : 3.3.101.56
  ServiceName : Certificate Manager Private Certificate Authority

  Service : AlexaForBusiness
  CmdletNounPrefix : ALXB
  ModuleName : AWS.Tools.AlexaForBusiness
  SDKAssemblyVersion : 3.3.106.26
  ServiceName : Alexa For Business
  ...
```

## Parameter `-Select` baru untuk Mengendalikan Obyek yang Dikembalikan oleh Cmdlet
<a name="migrate-select"></a>

Sebagian besar cmdlet dalam versi 4 mendukung parameter `-Select` baru. Setiap cmdlet memanggil AWS layanan APIs untuk Anda menggunakan. AWS SDK untuk .NET Kemudian Alat AWS untuk PowerShell klien mengubah respons menjadi objek yang dapat Anda gunakan dalam PowerShell skrip dan pipa ke perintah lain. Terkadang PowerShell objek akhir memiliki lebih banyak bidang atau properti dalam respons asli daripada yang Anda butuhkan, dan di lain waktu Anda mungkin ingin objek menyertakan bidang atau properti respons yang tidak ada secara default. Parameter `-Select` memungkinkan Anda untuk menyebutkan yang termasuk dalam obyek .NET yang dikembalikan oleh cmdlet.

Misalnya, [Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html)cmdlet memanggil operasi Amazon S3 SDK. [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) Operasi itu mengembalikan [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h)objek. Namun, secara default, `Get-S3Object` cmdlet hanya mengembalikan `S3Objects` elemen respons SDK kepada pengguna. PowerShell Pada contoh berikut, obyek adalah array dengan dua elemen.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket

ETag : "01234567890123456789012345678901111"
BucketName : amzn-s3-demo-bucket
Key : file1.txt
LastModified : 9/30/2019 1:31:40 PM
Owner : Amazon.S3.Model.Owner
Size : 568
StorageClass : STANDARD

ETag : "01234567890123456789012345678902222"
BucketName : amzn-s3-demo-bucket
Key : file2.txt
LastModified : 7/15/2019 9:36:54 AM
Owner : Amazon.S3.Model.Owner
Size : 392
StorageClass : STANDARD
```

Di Alat AWS untuk PowerShell versi 4, Anda dapat menentukan `-Select *` untuk mengembalikan objek respons.NET lengkap yang dikembalikan oleh panggilan SDK API.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select *
  IsTruncated    : False
  NextMarker     :
  S3Objects      : {file1.txt, file2.txt}
  Name           : amzn-s3-demo-bucket
  Prefix         :
  MaxKeys        : 1000
  CommonPrefixes : {}
  Delimiter      :
```

Anda juga dapat menyebutkan jalur ke properti nest tertentu yang Anda inginkan. Contoh berikut hanya mengembalikan properti `Key` dari setiap elemen dalam array `S3Objects`.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select S3Objects.Key
file1.txt
file2.txt
```

Dalam situasi tertentu, ini dapat berguna untuk mengembalikan parameter cmdlet. Anda dapat melakukannya dengan `-Select ^ParameterName`. Fitur ini menggantikan parameter `-PassThru`, yang masih tersedia tetapi tidak lagi digunakan. 

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select S3Objects.Key |
>> Write-S3ObjectTagSet -Select ^Key -BucketName amzn-s3-demo-bucket -Tagging_TagSet @{ Key='key'; Value='value'}
  file1.txt
  file2.txt
```

[Topik referensi](https://docs.aws.amazon.com/powershell/v4/reference/) untuk setiap cmdlet menentukan apakah mendukung parameter `-Select` tersebut atau tidak.

## Pembatasan Lebih Konsisten dari Jumlah Item dalam Output
<a name="migrate-iterate"></a>

Versi sebelumnya Alat AWS untuk PowerShell memungkinkan Anda untuk menggunakan `-MaxItems` parameter untuk menentukan jumlah maksimum objek yang dikembalikan dalam output akhir.

Perilaku ini dihapus dari `AWS.Tools`.

Perilaku ini tidak digunakan lagi di Shell. AWSPower NetCore dan AWSPower Shell, dan akan dihapus dari versi tersebut di rilis mendatang.

Jika API layanan yang mendasari mendukung parameter `MaxItems`, maka akan masih tersedia dan berfungsi sebagaimana yang disebutkan API. Tetapi tidak lagi mempunyai perilaku tambahan yang membatasi jumlah item yang dikembalikan dalam output cmdlet.

Untuk membatasi jumlah item yang dikembalikan dalam output akhir, pipa output ke `Select-Object` cmdlet dan tentukan `-First n` parameternya, di mana *n* jumlah maksimum item yang akan dimasukkan dalam output akhir.

```
PS > Get-S3ObjectV2 -BucketName amzn-s3-demo-bucket -Select S3Objects.Key | select -first 2
file1.txt
file2.txt
```

Tidak semua AWS layanan didukung dengan `-MaxItems` cara yang sama, jadi ini menghilangkan ketidakkonsistenan itu dan hasil tak terduga yang terkadang terjadi. Dan juga, `-MaxItems` yang dikombinasikan dengan parameter [`-Select`](#migrate-select) baru terkadang dapat mengakibatkan hasil yang membingungkan.

## Lebih Mudah Menggunakan Parameter Pengaliran
<a name="migrate-streamparam"></a>

Parameter jenis `Stream` atau `byte[]` sekarang dapat menerima nilai `string`, `string[]`, atau `FileInfo`.

Misalnya, Anda dapat menggunakan hal berikut.

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream '{
>> "some": "json"
>> }'
```

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream (ls .\some.json)
```

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream @('{', '"some": "json"', '}')
```

 Alat AWS untuk PowerShell mengkonversi semua string untuk `byte[]` menggunakan UTF-8 encoding.

## Memperluas Alur dengan Nama Properti
<a name="migrate-pipes"></a>

Agar pengalaman pengguna lebih konsisten, Anda sekarang dapat melewati input alur dengan menyebutkan nama properti untuk parameter *apa pun*. 

Pada contoh berikut, kita membuat obyek kustom dengan properti yang memiliki nama yang cocok dengan nama parameter cmdlet target. Ketika cmdlet berjalan, maka secara otomatis menggunakan properti tersebut sebagai parameternya.

```
PS > [pscustomobject] @{ BucketName='amzn-s3-demo-bucket'; Key='file1.txt'; PartNumber=1 } | Get-S3ObjectMetadata
```

**catatan**  
Beberapa properti mendukung ini di versi sebelumnya Alat AWS untuk PowerShell. Versi 4 membuatnya lebih konsisten dengan memungkinkannya untuk *semua* parameter.

## Parameter Umum Statis
<a name="migrate-staticcommonparams"></a>

Untuk meningkatkan konsistensi di versi 4.0 Alat AWS untuk PowerShell, semua parameter bersifat statis.

Pada versi sebelumnya Alat AWS untuk PowerShell, beberapa parameter umum seperti`AccessKey`,,`SecretKey`, atau `ProfileName``Region`, bersifat [dinamis](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters), sementara semua parameter lainnya bersifat statis. Ini dapat menimbulkan masalah karena PowerShell mengikat parameter statis sebelum parameter dinamis. Sebagai contoh, katakanlah Anda menjalankan perintah berikut.

```
PS > Get-EC2Region -Region us-west-2
```

Versi sebelumnya PowerShell mengikat nilai `us-west-2` ke parameter `-RegionName` statis alih-alih parameter `-Region` dinamis. Kemungkinan besar, hal ini dapat membingungkan pengguna.

## `AWS.Tools` Menyatakan dan Menerapkan Parameter Wajib
<a name="migrate-mandatoryparams"></a>

Modul-modul `AWS.Tools.*` saat ini menyatakan dan menerapkan parameter cmdlet wajib. Saat AWS Layanan menyatakan bahwa parameter API diperlukan, akan PowerShell meminta parameter cmdlet yang sesuai jika Anda tidak menentukannya. Ini hanya berlaku untuk `AWS.Tools`. Untuk memastikan kompatibilitas mundur, ini tidak berlaku untuk AWSPower Shell. NetCore atau AWSPower Shell.

## Semua Parameter Dapat Dibatalkan
<a name="migrate-nullableparams"></a>

Sekarang Anda dapat menetapkan `$null` untuk parameter jenis nilai (angka dan tanggal). Perubahan ini seharusnya tidak mempengaruhi skrip yang ada. Hal ini memungkinkan Anda untuk memotong prompt untuk parameter wajib. Parameter wajib diterapkan hanya di `AWS.Tools`.

Jika Anda menjalankan contoh berikut menggunakan versi 4, maka akan secara efektif memotong validasi sisi klien karena Anda memberikan "value" untuk setiap parameter wajib. Namun, panggilan layanan Amazon EC2 API gagal karena AWS layanan masih memerlukan informasi tersebut.

```
PS > Get-EC2InstanceAttribute -InstanceId $null -Attribute $null
WARNING: You are passing $null as a value for parameter Attribute which is marked as required.
In case you believe this parameter was incorrectly marked as required, report this by opening 
an issue at [https://github.com/aws/aws-tools-for-powershell/issues](https://github.com/aws/aws-tools-for-powershell/issues).
WARNING: You are passing $null as a value for parameter InstanceId which is marked as required.
In case you believe this parameter was incorrectly marked as required, report this by opening
an issue at [https://github.com/aws/aws-tools-for-powershell/issues](https://github.com/aws/aws-tools-for-powershell/issues).

Get-EC2InstanceAttribute : The request must contain the parameter instanceId
```

## Menghapus Fitur yang Sudah Tidak Lagi Digunakan
<a name="migrate-removeprevdeprecated"></a>

Fitur-fitur berikut tidak digunakan lagi dalam rilis sebelumnya Alat AWS untuk PowerShell dan dihapus di versi 4:
+ Menghapus parameter `-Terminate` dari cmdlet `Stop-EC2Instance`. Sebagai gantinya, gunakan `Remove-EC2Instance`.
+ Menghapus `-ProfileName` parameter dari Clear- AWSCredential cmdlet. Sebagai gantinya, gunakan `Remove-AWSCredentialProfile`.
+ Menghapus cmdlet `Import-EC2Instance` dan `Import-EC2Volume`.