

Herramientas de AWS para PowerShell La V4 ha entrado en modo de mantenimiento.

Le recomendamos que migre a la [Herramientas de AWS para PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/). Para obtener información y detalles adicionales sobre cómo realizar la migración, consulta nuestro [anuncio sobre el modo de mantenimiento](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de la Herramientas de AWS para PowerShell versión 3.3 a la versión 4
<a name="v4migration"></a>

Herramientas de AWS para PowerShell la versión 4 es una actualización compatible con versiones anteriores de la versión 3.3. Herramientas de AWS para PowerShell Agrega mejoras significativas a la vez que mantiene el comportamiento existente del cmdlet. 

Los scripts existentes deberían seguir funcionando después de actualizar a la nueva versión, pero recomendamos que los pruebe a fondo antes de actualizar los entornos de producción.

En esta sección, se describen los cambios y se explica cómo pueden afectar a los scripts.

## Nueva versión de `AWS.Tools` dividida completamente en módulos
<a name="migrate-aws-tools"></a>

La concha. AWSPower NetCore y los paquetes de AWSPower Shell eran «monolíticos». Esto significaba que todos los AWS servicios eran compatibles con el mismo módulo, lo que lo hacía muy grande y crecía a medida que se añadían nuevos AWS servicios y funciones. El nuevo `AWS.Tools` paquete está dividido en módulos más pequeños que le ofrecen la flexibilidad de descargar e instalar solo los que necesite para los AWS servicios que utilice. El paquete incluye un módulo `AWS.Tools.Common` compartido que todos los demás módulos necesitan y un módulo `AWS.Tools.Installer` que simplifica la instalación, actualización y eliminación de módulos, en función de las necesidades.

Esto también permite importar automáticamente cmdlets en la primera llamada sin tener que invocar primero a `Import-module`. Sin embargo, para interactuar con los objetos.NET asociados antes de llamar a un cmdlet, debe seguir llamando `Import-Module` para PowerShell informar sobre los tipos de.NET pertinentes. 

Por ejemplo, el comando siguiente contiene una referencia a `Amazon.EC2.Model.Filter`. Este tipo de referencia no puede desencadenar la importación automática, por lo que será necesario llamar primero a `Import-Module` o el comando no se ejecutará correctamente.

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

## Nuevo cmdlet `Get-AWSService`
<a name="migrate-get-awsservice"></a>

Para ayudarle a descubrir los nombres de los módulos de cada AWS servicio del `AWS.Tools` conjunto de módulos, puede usar el `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
  ...
```

## Nuevo parámetro `-Select` para controlar el objeto devuelto por un cmdlet
<a name="migrate-select"></a>

La mayoría de los cmdlets de la versión 4 admiten el nuevo parámetro `-Select`. Cada cmdlet llama al AWS servicio APIs por usted mediante. AWS SDK para .NET A continuación, el Herramientas de AWS para PowerShell cliente convierte la respuesta en un objeto que puede utilizar en sus PowerShell scripts y canalizarla a otros comandos. A veces, el PowerShell objeto final tiene más campos o propiedades en la respuesta original de los necesarios y, en otras ocasiones, puede que desee que el objeto incluya campos o propiedades de la respuesta que no aparecen de forma predeterminada. El parámetro `-Select` permite especificar el contenido que se va a incluir en el objeto .NET devuelto por el cmdlet.

Por ejemplo, el [Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html)cmdlet invoca la operación del SDK de Amazon S3. [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) Esa operación devuelve un objeto. [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h) Sin embargo, de forma predeterminada, el `Get-S3Object` cmdlet devuelve al usuario solo el `S3Objects` elemento de la respuesta del PowerShell SDK. En el siguiente ejemplo, ese objeto es una matriz con dos elementos.

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

En la Herramientas de AWS para PowerShell versión 4, puedes especificar `-Select *` que se devuelva el objeto de respuesta de.NET completo devuelto por la llamada a la API del 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      :
```

También puede especificar la ruta de acceso a una propiedad anidada específica que desee. En el ejemplo siguiente, solo se devuelve la propiedad `Key` de cada elemento de la matriz `S3Objects`.

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

En determinadas situaciones, puede ser útil devolver un parámetro de cmdlet. Puede hacerlo con `-Select ^ParameterName`. Esta función suplanta al parámetro `-PassThru`, que, aunque sigue estando disponible, se ha quedado obsoleto. 

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

[En el tema de referencia](https://docs.aws.amazon.com/powershell/v4/reference/) de cada cmdlet, se indica si se admite el parámetro `-Select`.

## Limitación más coherente del número de elementos de la salida
<a name="migrate-iterate"></a>

Las versiones anteriores de Herramientas de AWS para PowerShell permitían usar el `-MaxItems` parámetro para especificar el número máximo de objetos devueltos en la salida final.

Este comportamiento se ha eliminado en `AWS.Tools`.

Este comportamiento está obsoleto en AWSPower Shell. NetCore y AWSPower Shell, y se eliminará de esas versiones en un futuro lanzamiento.

Si la API del servicio subyacente es compatible con el parámetro `MaxItems`, seguirá estando disponible y funcionará tal y como especifica la API. Sin embargo, no dispondrá del comportamiento adicional que permite limitar el número de elementos devueltos en el resultado del cmdlet.

Para limitar el número de elementos devueltos en el resultado final, canalice el resultado al `Select-Object` cmdlet y especifique el `-First n` parámetro, que *n* es el número máximo de elementos que se van a incluir en el resultado final.

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

No todos los AWS servicios son compatibles `-MaxItems` de la misma manera, por lo que se elimina esa incoherencia y los resultados inesperados que se producían en ocasiones. Además, `-MaxItems` combinado con el nuevo parámetro [`-Select`](#migrate-select) podría dar lugar en ocasiones a resultados confusos.

## Parámetros de flujo más fáciles de usar
<a name="migrate-streamparam"></a>

Los parámetros de tipo `Stream` o `byte[]` ahora pueden aceptar valores `string`, `string[]` o `FileInfo`.

Por ejemplo, puede utilizar cualquiera de los siguientes ejemplos.

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

 Herramientas de AWS para PowerShell convierte todas las cadenas para que `byte[]` utilicen la codificación UTF-8.

## Ampliación de la canalización por nombre de propiedad
<a name="migrate-pipes"></a>

Para que la experiencia del usuario sea más coherente, ahora puede pasar la entrada de la canalización especificando el nombre de propiedad de *cualquier* parámetro. 

En el ejemplo siguiente, creamos un objeto personalizado con propiedades cuyos nombres coinciden con los nombres de parámetro del cmdlet de destino. Cuando se ejecuta el cmdlet, automáticamente consume esas propiedades como parámetros.

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

**nota**  
Algunas propiedades lo admitían en versiones anteriores de. Herramientas de AWS para PowerShell La versión 4 hace que este comportamiento sea más coherente, ya que está habilitado en *todos* los parámetros.

## Parámetros comunes estáticos
<a name="migrate-staticcommonparams"></a>

Para mejorar la coherencia en la versión 4.0 de Herramientas de AWS para PowerShell, todos los parámetros son estáticos.

En versiones anteriores de Herramientas de AWS para PowerShell, algunos parámetros comunes como`AccessKey`,`SecretKey`, o`ProfileName`, eran [dinámicos `Region`](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters), mientras que todos los demás eran estáticos. Esto podría crear problemas porque PowerShell vincula los parámetros estáticos antes que los dinámicos. Por ejemplo, supongamos que antes ejecutaba el siguiente comando.

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

Las versiones anteriores de PowerShell vinculaban el valor `us-west-2` al parámetro `-RegionName` estático en lugar del `-Region` dinámico. Probablemente, esto podría confundir a los usuarios.

## `AWS.Tools` declara y aplica parámetros obligatorios
<a name="migrate-mandatoryparams"></a>

Todos los módulos de `AWS.Tools.*` ahora declaran y aplican parámetros de cmdlet obligatorios. Cuando un AWS servicio declara que se requiere un parámetro de una API, PowerShell le solicita el parámetro del cmdlet correspondiente si no lo especificó. Esto solo es aplicable a `AWS.Tools`. Para garantizar la compatibilidad con versiones anteriores, esto no se aplica a Shell. AWSPower NetCore o AWSPower Shell.

## Todos los parámetros pueden ser nulos
<a name="migrate-nullableparams"></a>

Ahora puede asignar `$null` a los parámetros de tipo de valor (números y fechas). Este cambio no debería afectar a los scripts existentes. Esto le permitirá omitir el mensaje sobre la obligatoriedad de un parámetro. Los parámetros obligatorios solo se aplican forzosamente en `AWS.Tools`.

Si ejecuta el siguiente ejemplo utilizando la versión 4, se omitirá eficazmente la validación del lado del cliente porque se proporcionará un «valor» para cada parámetro obligatorio. Sin embargo, se produce un error en la llamada al servicio de la API de Amazon EC2 porque el AWS servicio sigue necesitando esa información.

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

## Eliminación de características que ya estaban obsoletas
<a name="migrate-removeprevdeprecated"></a>

Las siguientes funciones quedaron obsoletas en las versiones anteriores de la versión 4 Herramientas de AWS para PowerShell y se eliminaron en la versión 4:
+ El parámetro `-Terminate` se ha eliminado del cmdlet `Stop-EC2Instance`. En su lugar, use `Remove-EC2Instance`.
+ Se quitó el `-ProfileName` parámetro del AWSCredential cmdlet Clear-. En su lugar, use `Remove-AWSCredentialProfile`.
+ Los cmdlets `Import-EC2Instance` y `Import-EC2Volume` se han eliminado.