

Outils AWS pour PowerShell La V4 est passée en mode maintenance.

Nous vous recommandons de migrer vers la [Outils AWS pour PowerShell version 5](https://docs.aws.amazon.com/powershell/v5/userguide/). Pour plus de détails et d'informations sur la façon de migrer, veuillez consulter notre [annonce relative au mode de maintenance](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Migration de la Outils AWS pour PowerShell version 3.3 vers la version 4
<a name="v4migration"></a>

Outils AWS pour PowerShell la version 4 est une mise à jour rétrocompatible de la version 3.3. Outils AWS pour PowerShell Elle apporte des améliorations significatives tout en maintenant le comportement existant de l'applet de commande. 

Vos scripts existants devraient continuer à fonctionner après la mise à niveau vers la nouvelle version. Toutefois, nous vous recommandons de les tester soigneusement avant de procéder à la mise à niveau de vos environnements de production.

Cette section décrit les modifications et décrit l’impact qu’elles peuvent avoir sur vos scripts.

## Nouvelle version `AWS.Tools` entièrement modulaire
<a name="migrate-aws-tools"></a>

La AWSPower coque. NetCore et les packages AWSPower Shell étaient « monolithiques ». Cela signifiait que tous les AWS services étaient pris en charge dans le même module, ce qui le rendait très volumineux et augmentait à mesure que chaque nouveau AWS service ou fonctionnalité était ajouté. Le nouveau `AWS.Tools` package est divisé en modules plus petits qui vous permettent de télécharger et d'installer uniquement ceux dont vous avez besoin pour les AWS services que vous utilisez. Le package comprend un module `AWS.Tools.Common` partagé requis par tous les autres modules, et un module `AWS.Tools.Installer` qui simplifie l'installation, la mise à jour et la suppression des modules selon les besoins.

Ceci permet également l'importation automatique des applets de commande lors du premier appel, sans devoir d’abord appeler `Import-module`. Toutefois, pour interagir avec les objets .NET associés avant d'appeler une applet de commande, vous devez tout de même appeler `Import-Module` pour PowerShell connaître les types .NET pertinents. 

Par exemple, la commande suivante comporte une référence à `Amazon.EC2.Model.Filter`. Ce type de référence ne peut pas déclencher l'importation automatique, vous devez donc d’abord appeler `Import-Module` pour éviter l’échec de la commande.

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

## Nouvelle applet de commande `Get-AWSService`
<a name="migrate-get-awsservice"></a>

Pour vous aider à découvrir le nom des modules de chaque AWS service de la `AWS.Tools` collection de modules, vous pouvez utiliser l'`Get-AWSService`applet de commande.

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

## Nouveau paramètre `-Select` pour contrôler l'objet renvoyé par une applet de commande
<a name="migrate-select"></a>

La plupart des applets de commande de la version 4 prennent en charge un nouveau paramètre `-Select`. Chaque applet de commande appelle le AWS service à votre place APIs à l'aide du. AWS SDK pour .NET Le Outils AWS pour PowerShell client convertit ensuite la réponse en un objet que vous pouvez utiliser dans vos PowerShell scripts et rediriger vers d'autres commandes. Parfois, l' PowerShell objet final comporte plus de champs ou de propriétés dans la réponse d'origine que ce dont vous avez besoin, et d'autres fois, vous souhaiterez peut-être que l'objet inclue des champs ou des propriétés de la réponse qui n'y figurent pas par défaut. Le paramètre `-Select` vous permet de spécifier ce qui est inclus dans l'objet .NET renvoyé par l'applet de commande.

Par exemple, l'[Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html)applet de commande appelle l'opération du SDK Amazon S3. [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) Cette opération renvoie un [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h)objet. Toutefois, par défaut, l'`Get-S3Object`applet de commande renvoie uniquement l'`S3Objects`élément de la réponse du SDK à l'utilisateur. PowerShell Dans l'exemple suivant, cet objet est un tableau avec deux éléments.

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

Dans Outils AWS pour PowerShell la version 4, vous pouvez spécifier `-Select *` de renvoyer l'objet de réponse .NET complet renvoyé par l'appel d'API du SDK.

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

Vous pouvez également spécifier le chemin d'accès vers la propriété imbriquée spécifique de votre choix. L'exemple suivant renvoie uniquement la propriété `Key` de chaque élément du tableau `S3Objects`.

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

Dans certaines situations, il peut être utile de renvoyer un paramètre d'applet de commande. Vous pouvez effectuer cette opération avec `-Select ^ParameterName`. Cette fonctionnalité supplante le paramètre `-PassThru`, qui est toujours disponible, mais obsolète. 

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

[La rubrique de référence](https://docs.aws.amazon.com/powershell/v4/reference/) de chaque applet de commande identifie si elle prend en charge le paramètre `-Select`.

## Limitation plus cohérente du nombre d'éléments dans la sortie
<a name="migrate-iterate"></a>

Les versions antérieures de vous Outils AWS pour PowerShell permettaient d'utiliser le `-MaxItems` paramètre pour spécifier le nombre maximum d'objets renvoyés dans le résultat final.

Ce comportement est supprimé de `AWS.Tools`.

Ce comportement est obsolète dans Shell. AWSPower NetCore et AWSPower Shell, et seront supprimés de ces versions dans une future version.

Si l'API de service sous-jacente prend en charge un paramètre `MaxItems`, il sera toujours disponible et fonctionnera comme le spécifie l'API. Mais il ne présente plus le comportement qui consiste à limiter le nombre d'éléments renvoyés dans la sortie de l'applet de commande.

Pour limiter le nombre d'éléments renvoyés dans la sortie finale, dirigez la sortie vers l'`Select-Object`applet de commande et spécifiez le `-First n` paramètre, où *n* est le nombre maximum d'éléments à inclure dans la sortie finale.

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

Tous les AWS services ne sont pas pris `-MaxItems` en charge de la même manière, ce qui élimine cette incohérence et les résultats inattendus qui se produisaient parfois. De plus, `-MaxItems` combiné avec le nouveau paramètre [`-Select`](#migrate-select) entraînait parfois des résultats déroutants.

## Paramètres de flux plus faciles à utiliser
<a name="migrate-streamparam"></a>

Les paramètres de type `Stream` ou `byte[]` peuvent désormais accepter les valeurs `string`, `string[]` ou `FileInfo`.

Par exemple, vous pouvez utiliser l'un des exemples suivants.

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

 Outils AWS pour PowerShell convertit toutes les chaînes en `byte[]` utilisant le codage UTF-8.

## Extension du pipeline par nom de propriété
<a name="migrate-pipes"></a>

Pour rendre l'expérience utilisateur plus cohérente, vous pouvez désormais transmettre l'entrée de pipeline en spécifiant le nom de propriété pour *n'importe quel* paramètre. 

Dans l'exemple suivant, nous créons un objet personnalisé avec des propriétés dont les noms correspondent aux noms de paramètres de l'applet de commande cible. Lorsque l'applet de commande s'exécute, elle utilise automatiquement ces propriétés comme paramètres.

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

**Note**  
Certaines propriétés prenaient cela en charge dans les versions antérieures de Outils AWS pour PowerShell. La version 4 rend cela plus cohérent en l'activant pour *tous* les paramètres.

## Paramètres communs statiques
<a name="migrate-staticcommonparams"></a>

Pour améliorer la cohérence dans la version 4.0 de Outils AWS pour PowerShell, tous les paramètres sont statiques.

Dans les versions antérieures de Outils AWS pour PowerShell, certains paramètres courants tels que`AccessKey`,`SecretKey`, ou `ProfileName``Region`, étaient [dynamiques](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters), tandis que tous les autres paramètres étaient statiques. Cela peut créer des problèmes car PowerShell lie les paramètres statiques aux paramètres dynamiques. Par exemple, imaginons que vous ayez exécuté la commande suivante.

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

Les versions antérieures de PowerShell liaient la valeur `us-west-2` au paramètre `-RegionName` statique plutôt qu'au paramètre `-Region` dynamique. Ceci pouvait perturber les utilisateurs.

## `AWS.Tools` déclare et applique les paramètres obligatoires
<a name="migrate-mandatoryparams"></a>

Les modules `AWS.Tools.*` déclarent et appliquent désormais les paramètres obligatoires de l’applet de commande. Lorsqu'un AWS service déclare qu'un paramètre d'une API est requis, il vous PowerShell demande le paramètre d'applet de commande correspondant si vous ne l'avez pas spécifié. Ceci s'applique uniquement à `AWS.Tools`. Pour garantir la rétrocompatibilité, cela ne s'applique pas à AWSPower Shell. NetCore ou AWSPower Shell.

## Tous les paramètres sont nullables
<a name="migrate-nullableparams"></a>

Vous pouvez désormais attribuer `$null` aux paramètres de type valeur (nombres et dates). Cette modification ne devrait pas affecter les scripts existants. Ceci vous permet de contourner l'invite pour un paramètre obligatoire. Les paramètres obligatoires sont appliqués dans `AWS.Tools` uniquement.

Si vous exécutez l'exemple suivant en utilisant la version 4, il contournera efficacement la validation côté client, car vous fournissez une « valeur » pour chaque paramètre obligatoire. Cependant, l'appel du service d'API Amazon EC2 échoue car le AWS service a toujours besoin de ces informations.

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

## Suppression des fonctions obsolètes dans les versions antérieures
<a name="migrate-removeprevdeprecated"></a>

Les fonctionnalités suivantes étaient obsolètes dans les versions précédentes de Outils AWS pour PowerShell et ont été supprimées dans la version 4 :
+ Suppression du paramètre `-Terminate` de l'applet de commande `Stop-EC2Instance`. Utilisez `Remove-EC2Instance` à la place.
+ Le `-ProfileName` paramètre a été supprimé de l'AWSCredential applet de commande Clear-. Utilisez `Remove-AWSCredentialProfile` à la place.
+ Suppression des applets de commande `Import-EC2Instance` et `Import-EC2Volume`.