

AWS Tools for PowerShell V4 がメンテナンスモードになりました。

[AWS Tools for PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/) に移行することをお勧めします。移行方法の詳細と情報については、[メンテナンスモードのお知らせ](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/)を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Tools for PowerShell バージョン 3.3 からバージョン 4 への移行
<a name="v4migration"></a>

AWS Tools for PowerShell バージョン 4 は、 AWS Tools for PowerShell バージョン 3.3 への下位互換性の更新です。既存のコマンドレットの動作を維持しながら、大幅な機能強化を追加します。

既存のスクリプトは、新しいバージョンにアップグレードした後も引き続き動作しますが、本番環境をアップグレードする前に十分にテストすることをお勧めします。

このセクションでは、変更点を示し、これらがスクリプトに与える影響について説明します。

## 完全モジュール化された新しい `AWS.Tools` バージョン
<a name="migrate-aws-tools"></a>

AWSPowerShell.NetCore と AWSPowerShell のパッケージは「モノリシック」でした。これは、すべての AWS サービスが同じモジュールでサポートされ、非常に大きくなり、新しい AWS サービスや機能が追加されるたびに大きくなることを意味します。新しい`AWS.Tools`パッケージは、使用する AWS サービスに必要なものだけを柔軟にダウンロードしてインストールできる小さなモジュールに分割されています。パッケージには、他のすべてのモジュールと共有される必須の `AWS.Tools.Common` モジュールと、必要に応じてモジュールのインストール、更新、および削除を簡素化するための `AWS.Tools.Installer` モジュールが含まれています。

これにより、最初に `Import-module` を呼び出すことなく、最初の呼び出しでコマンドレットを自動的にインポートできます。ただし、コマンドレットを呼び出す前に、関連付けられた .NET オブジェクトを操作するには、依然として `Import-Module` を呼び出し、関連する .NET タイプを PowerShell に知らせる必要があります。

たとえば、次のコマンドには `Amazon.EC2.Model.Filter` への参照があります。このタイプの参照は自動インポートをトリガーできないため、`Import-Module` を最初に呼び出さないと、コマンドは失敗します。

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

## 新しい `Get-AWSService` コマンドレット
<a name="migrate-get-awsservice"></a>

モジュールの`AWS.Tools`コレクション内の各 AWS サービスのモジュール名を検出するには、 `Get-AWSService` コマンドレットを使用できます。

```
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
  ...
```

## コマンドレットから返されるオブジェクトを制御するための新しい `-Select` パラメータ
<a name="migrate-select"></a>

バージョン 4 のほとんどのコマンドレットは、新しい `-Select` パラメータをサポートしています。各コマンドレットは、 AWS SDK for .NETを使用してユーザーに代わって AWS のサービス API を呼び出します。次に、 AWS Tools for PowerShell クライアントはレスポンスを PowerShell スクリプトで使用できるオブジェクトに変換し、他のコマンドにパイプします。最終的な PowerShell オブジェクトには、元のレスポンスのフィールドやプロパティが必要以上に多く含まれる場合があります。また、レスポンスのフィールドやプロパティをデフォルト数よりも多くオブジェクトに含めることもできます。`-Select` パラメータを使用すると、コマンドレットから返される .NET オブジェクトに含める内容を指定できます。

例えば、[Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html) コマンドレットは、Amazon S3 SDK オペレーション [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) を呼び出します。このオペレーションは、[ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h) オブジェクトを返します。ただし、デフォルトでは、`Get-S3Object` コマンドレットは SDK レスポンスの `S3Objects` 要素のみを PowerShell ユーザーに返します。次の例では、そのオブジェクトは 2 つの要素を持つ配列です。

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

 AWS Tools for PowerShell バージョン 4 では、 を指定`-Select *`して、SDK API コールによって返された完全な .NET レスポンスオブジェクトを返すことができます。

```
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      :
```

特定のネストされたプロパティへのパスを指定することもできます。次の例では、`S3Objects` 配列内の各要素の `Key` プロパティのみを返します。

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

状況によっては、コマンドレットパラメータを返すと便利です。そのためには、`-Select ^ParameterName` を使用します。この機能は、`-PassThru` パラメータに代わるものです。このパラメータはまだ使用可能ですが、非推奨です。

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

各コマンドレットの[参照トピック](https://docs.aws.amazon.com/powershell/v4/reference/)は、`-Select` パラメータをサポートしているかどうかを示します。

## より一貫した方法による出力内の項目数の制限
<a name="migrate-iterate"></a>

以前のバージョンの AWS Tools for PowerShell では、 `-MaxItems`パラメータを使用して、最終出力で返されるオブジェクトの最大数を指定できます。

この動作は `AWS.Tools` から削除されています。

この動作は AWSPowerShell.NetCore および AWSPowerShell で非推奨であり、今後のリリースでこれらのバージョンから削除されます。

基になるサービス API が `MaxItems` パラメータをサポートしている場合は、依然として使用可能であり、API が指定するとおりに機能します。ただし、コマンドレットの出力で返される項目の数を制限する追加動作はなくなりました。

最終出力で返される項目の数を制限するには、出力を `Select-Object` コマンドレットにパイプし、`-First n` パラメータを指定します。*n* は最終出力に含める項目の最大数です。

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

すべての AWS サービス`-MaxItems`が同じ方法でサポートされているわけではないため、この不整合や、ときに発生する予期しない結果を排除できます。また、`-MaxItems` と新しい [`-Select`](#migrate-select) パラメータと組み合わせて使用すると、混乱する結果が生じることがあります。

## ストリームパラメータの使用の容易化
<a name="migrate-streamparam"></a>

`Stream` タイプまたは `string` タイプのパラメータが、`string[]`、`FileInfo`、`byte[]` の各値を受け入れるようになりました。

次のいずれかの例を使用できます。

```
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"', '}')
```

 AWS Tools for PowerShell は、UTF-8 エンコーディング`byte[]`を使用してすべての文字列を に変換します。

## プロパティ名によるパイプの拡張
<a name="migrate-pipes"></a>

ユーザーエクスペリエンスをより一貫させるために、*任意*のパラメータにプロパティ名を指定して、パイプライン入力を渡すことができるようになりました。

次の例では、ターゲットコマンドレットのパラメータ名と一致する名前を持つプロパティを持つカスタムオブジェクトを作成します。コマンドレットを実行すると、これらのプロパティが自動的にパラメータとして使用されます。

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

**注記**  
一部のプロパティは、 の以前のバージョンでこれをサポートしていました AWS Tools for PowerShell。バージョン 4 では、これを*すべて*のパラメータで有効にすることで、より一貫させています。

## 静的な共通パラメータ
<a name="migrate-staticcommonparams"></a>

バージョン 4.0 の一貫性を向上させるために AWS Tools for PowerShell、すべてのパラメータは静的です。

以前のバージョンの では AWS Tools for PowerShell、、`AccessKey`、`SecretKey`、 `ProfileName`などの一般的なパラメータは[動的](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters)`Region`でしたが、他のすべてのパラメータは静的でした。この場合、PowerShell は動的パラメータの前に静的パラメータをバインドするため、問題が発生する可能性があります。たとえば、次のコマンドを実行したとします。

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

以前のバージョンの PowerShell では、値 `us-west-2` が `-Region` 動的パラメータではなく `-RegionName` 静的パラメータにバインドされていました。これも、ユーザーの混乱につながる可能性があります。

## `AWS.Tools` による必須パラメータの宣言と適用
<a name="migrate-mandatoryparams"></a>

`AWS.Tools.*` モジュールは、必須のコマンドレットパラメータを宣言して適用するようになりました。 AWS のサービスで API のパラメータが必須であると宣言されると、対応するコマンドレットパラメータを指定していない場合、PowerShell からパラメータを指定するよう求められます。これは `AWS.Tools` にのみ適用されます。下位互換性を確保するため、これは AWSPowerShell.NetCore や AWSPowerShell には適用されません。

## すべてのパラメータが NULL を使用可能
<a name="migrate-nullableparams"></a>

値タイプパラメータ (数値と日付) に `$null` に割り当てることができるようになりました。この変更は、既存のスクリプトには影響しません。これにより、必須パラメータを要求するプロンプトをバイパスできます。必須パラメータは、`AWS.Tools` でのみ要求されます。

バージョン 4 を使用して次の例を実行すると、各必須パラメータに「値」を指定するため、クライアント側の検証は効果的にバイパスされます。ただし、サービスが引き続きその情報を必要とするため、Amazon EC2 API AWS サービスコールは失敗します。

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

## 以前の非推奨機能の削除
<a name="migrate-removeprevdeprecated"></a>

の以前のリリースでは以下の機能は廃止 AWS Tools for PowerShell され、バージョン 4 では削除されました。
+ `Stop-EC2Instance` コマンドレットから `-Terminate` パラメータを削除しました。代わりに `Remove-EC2Instance` を使用します。
+ Clear-AWSCredential コマンドレットから `-ProfileName` パラメータを削除しました。代わりに `Remove-AWSCredentialProfile` を使用します。
+ `Import-EC2Instance` コマンドレットと `Import-EC2Volume` コマンドレットを削除しました。