

AWS -Tools für PowerShell V4 ist in den Wartungsmodus gewechselt.

Wir empfehlen Ihnen, auf [AWS -Tools für PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/) zu migrieren. Weitere Einzelheiten und Informationen zur Migration finden Sie in unserer [Ankündigung zum Wartungsmodus](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Migration von AWS -Tools für PowerShell Version 3.3 zu Version 4
<a name="v4migration"></a>

AWS -Tools für PowerShell Version 4 ist ein abwärtskompatibles Update auf Version 3.3. AWS -Tools für PowerShell Es wurde um erhebliche Verbesserungen ergänzt, gleichzeitig bleibt das vorhandene Cmdlet-Verhalten beibehalten. 

Ihre vorhandenen Skripts sollten nach dem Upgrade auf die neue Version weiterhin funktionieren. Wir empfehlen jedoch, sie gründlich zu testen, bevor Sie Ihre Produktionsumgebungen aktualisieren.

In diesem Abschnitt werden die Änderungen beschrieben und wird erläutert, wie sich diese auf Ihre Skripts auswirken können.

## Vollständig modularisierte `AWS.Tools`-Version
<a name="migrate-aws-tools"></a>

Die Shell. AWSPower NetCore und AWSPower Shell-Pakete waren „monolithisch“. Das bedeutete, dass alle AWS Dienste in demselben Modul unterstützt wurden, wodurch es sehr umfangreich wurde und mit jedem neuen AWS Dienst und jeder neuen Funktion immer größer wurde. Das neue `AWS.Tools` Paket ist in kleinere Module unterteilt, sodass Sie flexibel nur die Module herunterladen und installieren können, die Sie für die von Ihnen verwendeten AWS Dienste benötigen. Das Paket enthält ein gemeinsames `AWS.Tools.Common`-Modul, das von allen anderen Modulen benötigt wird, und ein `AWS.Tools.Installer`-Modul, das das Installieren, Aktualisieren und Entfernen von Modulen bedarfsgerecht vereinfacht.

Dies ermöglicht auch das automatische Importieren von Cmdlets beim ersten Aufruf, ohne dass zunächst `Import-module` aufgerufen werden muss. Um jedoch vor dem Aufrufen eines Cmdlets mit den verknüpften.NET-Objekten zu interagieren, müssen Sie trotzdem aufrufen, `Import-Module` um Informationen PowerShell über die relevanten.NET-Typen zu erhalten. 

Der folgende Befehl umfasst beispielsweise einen Verweis auf `Amazon.EC2.Model.Filter`. Dieser Referenztyp kann den automatischen Import nicht auslösen. Damit der Befehl nicht fehlschlägt, müssen Sie zunächst `Import-Module` aufrufen.

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

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

Sie können das Cmdlet verwenden, um die Namen der Module für jeden AWS Dienst in der `AWS.Tools` Modulsammlung zu ermitteln. `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
  ...
```

## Neuer `-Select`-Parameter zum Steuern des von einem Cmdlet zurückgegebenen Objekts
<a name="migrate-select"></a>

Die meisten Cmdlets der Version 4 unterstützen einen neuen `-Select`-Parameter. Jedes Cmdlet ruft den AWS Dienst mithilfe von APIs für Sie auf. AWS SDK für .NET Anschließend konvertiert der AWS -Tools für PowerShell Client die Antwort in ein Objekt, das Sie in Ihren PowerShell Skripts verwenden und an andere Befehle weiterleiten können. Manchmal enthält das endgültige PowerShell Objekt in der ursprünglichen Antwort mehr Felder oder Eigenschaften, als Sie benötigen, und manchmal möchten Sie vielleicht, dass das Objekt Felder oder Eigenschaften der Antwort enthält, die standardmäßig nicht vorhanden sind. Mit dem `-Select`-Parameter können Sie angeben, was in dem vom Cmdlet zurückgegebenen NET-Objekt enthalten sein soll.

Das [Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html)Cmdlet ruft beispielsweise den Amazon S3 S3-SDK-Vorgang auf. [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html) Dieser Vorgang gibt ein Objekt zurück. [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h) Standardmäßig gibt das `Get-S3Object` Cmdlet jedoch nur das `S3Objects` Element der SDK-Antwort an den PowerShell Benutzer zurück. Im folgenden Beispiel ist dieses Objekt ein Array mit zwei Elementen.

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

In AWS -Tools für PowerShell Version 4 können Sie angeben`-Select *`, dass das vollständige .NET-Antwortobjekt zurückgegeben werden soll, das vom SDK-API-Aufruf zurückgegeben wurde.

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

Sie können auch den Pfad zu der gewünschten verschachtelten Eigenschaft angeben. Im folgenden Beispiel wird nur die `Key`-Eigenschaft jedes Elements im `S3Objects`-Array zurückgegeben.

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

In bestimmten Situationen kann es sinnvoll sein, einen Cmdlet-Parameter zurückzugeben. Sie können dies mit `-Select ^ParameterName` tun. Diese Funktion ersetzt den `-PassThru`-Parameter, der zwar noch verfügbar, aber veraltet ist. 

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

[Das Referenzthema](https://docs.aws.amazon.com/powershell/v4/reference/) für jedes Cmdlet erkennt, ob es den Parameter `-Select` unterstützt.

## Konsistentere Begrenzung der Anzahl der Elemente in der Ausgabe
<a name="migrate-iterate"></a>

In früheren Versionen von AWS -Tools für PowerShell konnten Sie den `-MaxItems` Parameter verwenden, um die maximale Anzahl von Objekten anzugeben, die in der endgültigen Ausgabe zurückgegeben wurden.

Dieses Verhalten wird aus `AWS.Tools` entfernt.

Dieses Verhalten ist in AWSPower Shell veraltet. NetCore und AWSPower Shell, und wird in einer future Version aus diesen Versionen entfernt.

Wenn die zugrunde liegende Service-API einen `MaxItems`-Parameter unterstützt, ist er weiterhin verfügbar und funktioniert wie in der API angegeben. Aber er verfügt nicht mehr über das zusätzliche Verhalten, die Anzahl der Elemente zu begrenzen, die in der Ausgabe des Cmdlets zurückgegeben werden.

Um die Anzahl der in der endgültigen Ausgabe zurückgegebenen Elemente zu begrenzen, leiten Sie die Ausgabe über die Pipeline an das `Select-Object` Cmdlet weiter und geben Sie den `-First n` Parameter an*n*, der die maximale Anzahl von Elementen angibt, die in der endgültigen Ausgabe enthalten sein sollen.

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

Nicht alle AWS Dienste werden auf die gleiche `-MaxItems` Weise unterstützt, sodass diese Inkonsistenz und die unerwarteten Ergebnisse, die manchmal auftraten, behoben werden. Außerdem konnte `-MaxItems` in Kombination mit dem neuen [`-Select`](#migrate-select)-Parameter zuweilen zu irritierenden Ergebnissen führen.

## Einfachere Verwendung von Stream-Parametern
<a name="migrate-streamparam"></a>

Parameter vom Typ `Stream` oder `byte[]` können nun `string`-, `string[]`- oder `FileInfo`-Werte übernehmen.

Sie können z. B. eines der folgenden Beispiele verwenden.

```
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 für PowerShell konvertiert alle Zeichenketten in die `byte[]` UTF-8-Kodierung.

## Erweitern der Pipe um den Eigenschaftsnamen
<a name="migrate-pipes"></a>

Um die Benutzererfahrung konsistenter zu gestalten, können Sie nun Pipeline-Eingaben übergeben, indem Sie den Eigenschaftsnamen für einen *beliebigen* Parameter angeben. 

Im folgenden Beispiel erstellen wir ein benutzerdefiniertes Objekt mit Eigenschaften, die Namen aufweisen, die mit den Parameternamen des Ziel-Cmdlets übereinstimmen. Wenn das Cmdlet ausgeführt wird, werden diese Eigenschaften automatisch als dessen Parameter verwendet.

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

**Anmerkung**  
Einige Eigenschaften unterstützten dies in früheren Versionen von. AWS -Tools für PowerShell Mit Version 4 erfolgt dies konsequenter, indem es für *alle* Parameter aktiviert wird.

## Statische gängige Parameter
<a name="migrate-staticcommonparams"></a>

Um die Konsistenz in Version 4.0 von zu verbessern AWS -Tools für PowerShell, sind alle Parameter statisch.

In früheren Versionen von AWS -Tools für PowerShell waren einige allgemeine Parameter wie`AccessKey`, `SecretKey``ProfileName`, oder`Region`, [dynamisch](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters), während alle anderen Parameter statisch waren. Dies könnte zu Problemen führen, da statische PowerShell Parameter vor dynamischen Parametern gebunden werden. Angenommen, Sie haben den folgenden Befehl ausgeführt:

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

Frühere Versionen von haben den Wert `us-west-2` an den `-RegionName` statischen Parameter statt an den `-Region` dynamischen Parameter PowerShell gebunden. Dies konnte Benutzer durchaus irritieren.

## `AWS.Tools` deklariert und erzwingt obligatorische Parameter
<a name="migrate-mandatoryparams"></a>

Die Module `AWS.Tools.*` deklarieren und erzwingen nun obligatorische Cmdlet-Parameter. Wenn ein AWS Service deklariert, dass ein API-Parameter erforderlich ist, werden Sie zur Eingabe des entsprechenden Cmdlet-Parameters PowerShell aufgefordert, sofern Sie ihn nicht angegeben haben. Dies gilt nur für `AWS.Tools`. Um die Abwärtskompatibilität zu gewährleisten, gilt dies nicht für Shell. AWSPower NetCore oder AWSPower Shell.

## Alle Parameter sind löschbar
<a name="migrate-nullableparams"></a>

Sie können nun den Werttyp-Parametern (Zahlen und Daten) `$null` zuordnen. Diese Änderung sollte sich nicht auf vorhandene Skripte auswirken. Auf diese Weise können Sie die Eingabeaufforderung für einen obligatorischen Parameter umgehen. Obligatorische Parameter werden nur in `AWS.Tools` erzwungen.

Wenn Sie das folgende Beispiel mit Version 4 ausführen, wird die clientseitige Validierung effektiv umgangen, da Sie für jeden obligatorischen Parameter einen „Wert“ angeben. Der Amazon EC2 EC2-API-Serviceaufruf schlägt jedoch fehl, da der AWS Service diese Informationen immer noch benötigt.

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

## Entfernen von zuvor nicht unterstützten Funktionen
<a name="migrate-removeprevdeprecated"></a>

Die folgenden Funktionen waren in früheren Versionen von veraltet AWS -Tools für PowerShell und wurden in Version 4 entfernt:
+ Der `-Terminate`-Parameter wurde aus dem `Stop-EC2Instance`-Cmdlet entfernt. Verwenden Sie stattdessen `Remove-EC2Instance`.
+ Der `-ProfileName` Parameter wurde aus dem Clear- AWSCredential Cmdlet entfernt. Verwenden Sie stattdessen `Remove-AWSCredentialProfile`.
+ Es wurden die Cmdlets `Import-EC2Instance` und `Import-EC2Volume` entfernt.