

AWS Strumenti per PowerShell La V4 è entrata in modalità manutenzione.

[Ti consigliamo di migrare alla AWS Strumenti per PowerShell versione V5.](https://docs.aws.amazon.com/powershell/v5/userguide/) Per ulteriori dettagli e informazioni su come eseguire la migrazione, consulta il nostro annuncio sulla modalità di [manutenzione](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/).

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Migrazione dalla AWS Strumenti per PowerShell versione 3.3 alla versione 4
<a name="v4migration"></a>

AWS Strumenti per PowerShell la versione 4 è un aggiornamento retrocompatibile alla versione 3.3. AWS Strumenti per PowerShell Aggiunge miglioramenti significativi pur mantenendo il comportamento dei cmdlet esistenti. 

Gli script esistenti dovrebbero continuare a funzionare dopo l'aggiornamento alla nuova versione, ma si consiglia di verificarli accuratamente prima di eseguire l'aggiornamento agli ambienti di produzione.

Questa sezione descrive le modifiche e spiega come potrebbero influire sugli script.

## Nuova versione `AWS.Tools` completamente modularizzata
<a name="migrate-aws-tools"></a>

La Shell. AWSPower NetCore e i pacchetti AWSPower Shell erano «monolitici». Ciò significava che tutti i AWS servizi erano supportati nello stesso modulo, il che lo rendeva molto grande e cresceva man mano che venivano aggiunti nuovi AWS servizi e funzionalità. Il nuovo `AWS.Tools` pacchetto è suddiviso in moduli più piccoli che offrono la flessibilità di scaricare e installare solo quelli necessari per i AWS servizi utilizzati. Il pacchetto include un modulo `AWS.Tools.Common` condiviso richiesto da tutti gli altri moduli e un modulo `AWS.Tools.Installer` che semplifica l'installazione, l'aggiornamento e la rimozione dei moduli secondo necessità.

Ciò consente anche l'importazione automatica dei cmdlet alla prima chiamata, senza dover effettuare la prima chiamata `Import-module`. Tuttavia, per interagire con gli oggetti.NET associati prima di chiamare un cmdlet, è comunque necessario chiamare `Import-Module` per comunicare i PowerShell tipi.NET pertinenti. 

Ad esempio, il comando seguente ha un riferimento a `Amazon.EC2.Model.Filter`. Questo tipo di riferimento non può attivare l'importazione automatica, quindi è necessario chiamare prima `Import-Module` o il comando fallisce.

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

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

Per facilitare l'individuazione dei nomi dei moduli per ogni AWS servizio nell'`AWS.Tools`insieme di moduli, è possibile utilizzare il `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
  ...
```

## Nuovo parametro `-Select` per controllare l'oggetto restituito da un cmdlet
<a name="migrate-select"></a>

La maggior parte dei cmdlet nella versione 4 supporta un nuovo parametro `-Select`. Ogni cmdlet richiama il AWS servizio automaticamente utilizzando APIs . AWS SDK per .NET Il AWS Strumenti per PowerShell client converte quindi la risposta in un oggetto che è possibile utilizzare negli PowerShell script e reindirizzare ad altri comandi. A volte l' PowerShell oggetto finale ha più campi o proprietà nella risposta originale del necessario e altre volte potresti volere che l'oggetto includa campi o proprietà della risposta che non sono presenti per impostazione predefinita. Il parametro `-Select` consente di specificare gli elementi inclusi nell'oggetto.NET restituito dal cmdlet.

Ad esempio, il [Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html)cmdlet richiama l'operazione SDK Amazon S3. [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) Tale operazione restituisce un oggetto. [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h) Tuttavia, per impostazione predefinita, il `Get-S3Object` cmdlet restituisce all'utente solo l'`S3Objects`elemento della risposta SDK. PowerShell Nell'esempio seguente, tale oggetto è un array con due elementi.

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

Nella AWS Strumenti per PowerShell versione 4, è possibile specificare di `-Select *` restituire l'oggetto di risposta.NET completo restituito dalla chiamata API 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      :
```

È inoltre possibile specificare il percorso della proprietà nidificata specifica desiderata. L'esempio seguente restituisce solo la proprietà `Key` di ciascun elemento della matrice `S3Objects`.

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

In alcune situazioni può essere utile restituire un parametro cmdlet. Tale operazione può essere eseguita con `-Select ^ParameterName`. Questa funzione sostituisce il parametro `-PassThru`, che è ancora disponibile ma deprecato. 

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

[L' argomento di riferimento](https://docs.aws.amazon.com/powershell/v4/reference/) per ogni cmdlet consente di identificare se supporta il parametro `-Select`.

## Limitazione più coerente del numero di elementi nell'output
<a name="migrate-iterate"></a>

Le versioni precedenti di AWS Strumenti per PowerShell consentivano di utilizzare il `-MaxItems` parametro per specificare il numero massimo di oggetti restituiti nell'output finale.

Questo comportamento è stato rimosso da `AWS.Tools`.

Questo comportamento è obsoleto in Shell. AWSPower NetCore e AWSPower Shell, e verranno rimossi da tali versioni in una versione futura.

Se l'API del servizio sottostante supporta un parametro `MaxItems`, è ancora disponibile e funziona come specificato dall'API. Ma non ha più il comportamento ulteriore di limitare il numero di elementi restituiti nell'output del cmdlet.

Per limitare il numero di elementi restituiti nell'output finale, reindirizzate l'output al `Select-Object` cmdlet e specificate il `-First n` parametro, dove *n* è il numero massimo di elementi da includere nell'output finale.

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

Non tutti i AWS servizi sono supportati `-MaxItems` allo stesso modo, quindi questo elimina l'incoerenza e i risultati imprevisti che a volte si verificavano. Inoltre, `-MaxItems` in combinazione con il nuovo parametro [`-Select`](#migrate-select) a volte potrebbe portare a risultati confusi.

## Parametri di flusso più facili da usare
<a name="migrate-streamparam"></a>

Parametri di tipo `Stream` o `byte[]` possono ora accettare valori `string`, `string[]` o `FileInfo`.

Ad esempio, è possibile utilizzare uno dei seguenti esempi.

```
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 Strumenti per PowerShell converte tutte le stringhe `byte[]` utilizzando la codifica UTF-8.

## Estendere la pipe in base al nome della proprietà
<a name="migrate-pipes"></a>

Per rendere l'esperienza utente più coerente, è ora possibile passare l'input della pipeline specificando il nome della proprietà per *qualsiasi* parametro. 

Nell'esempio seguente viene creato un oggetto personalizzato con proprietà con nomi corrispondenti ai nomi dei parametri del cmdlet di destinazione. Quando viene eseguito il cmdlet, vengono automaticamente consumate tali proprietà come parametri.

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

**Nota**  
Alcune proprietà lo supportavano nelle versioni precedenti di. AWS Strumenti per PowerShell La versione 4 rende questo più coerente abilitandolo per *tutti* i parametri.

## Parametri comuni statici
<a name="migrate-staticcommonparams"></a>

Per migliorare la coerenza nella versione 4.0 di AWS Strumenti per PowerShell, tutti i parametri sono statici.

Nelle versioni precedenti di AWS Strumenti per PowerShell, alcuni parametri comuni come`AccessKey`,, o `SecretKey``ProfileName`, erano [dinamici `Region`](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters), mentre tutti gli altri parametri erano statici. Ciò potrebbe creare problemi perché PowerShell associa i parametri statici prima di quelli dinamici. Ad esempio, supponiamo che tu abbia eseguito il seguente comando.

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

Le versioni precedenti di PowerShell associavano il valore `us-west-2` al parametro `-RegionName` statico anziché al parametro `-Region` dinamico. Probabilmente, questo potrebbe confondere gli utenti.

## `AWS.Tools` Dichiara e applica i parametri obbligatori
<a name="migrate-mandatoryparams"></a>

I moduli `AWS.Tools.*` ora dichiarano e applicano parametri cmdlet obbligatori. Quando un AWS servizio dichiara che è necessario un parametro di un'API, PowerShell richiede il parametro del cmdlet corrispondente se non lo si è specificato. Questo vale solo per `AWS.Tools`. Per garantire la compatibilità con le versioni precedenti, ciò non si applica a Shell. AWSPower NetCore o AWSPower Shell.

## Tutti i parametri sono “nullable”
<a name="migrate-nullableparams"></a>

È ora possibile assegnare `$null` ai parametri del tipo di valore (numeri e date). Questa modifica non dovrebbe influire sugli script esistenti. Ciò consente di ignorare la richiesta di un parametro obbligatorio. I parametri obbligatori sono applicati solo in `AWS.Tools`.

Se viene eseguito l’esempio seguente utilizzando la versione 4, il medesimo ignora effettivamente la convalida lato client perché si fornisce un «valore» per ogni parametro obbligatorio. Tuttavia, la chiamata al servizio API di Amazon EC2 non riesce perché il AWS servizio richiede ancora tali informazioni.

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

## Rimozione di funzionalità precedentemente deprecate
<a name="migrate-removeprevdeprecated"></a>

Le seguenti funzionalità erano obsolete nelle versioni precedenti di AWS Strumenti per PowerShell e sono state rimosse nella versione 4:
+ Rimosso il parametro `-Terminate` dal cmdlet `Stop-EC2Instance`. Usare invece `Remove-EC2Instance`.
+ È stato rimosso il `-ProfileName` parametro dal cmdlet Clear-. AWSCredential Usare invece `Remove-AWSCredentialProfile`.
+ Rimossi i cmdlet `Import-EC2Instance` e `Import-EC2Volume`.