

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.

# So verwendet Image Builder die AWS Task Orchestrator and Executor Anwendung zur Verwaltung von Komponenten
<a name="toe-component-manager"></a>

EC2 Image Builder verwendet die AWS Task Orchestrator and Executor (AWSTOE) -Anwendung, um komplexe Workflows zu orchestrieren, Systemkonfigurationen zu ändern und Ihre Images zu testen, ohne dass zusätzliche DevOps-Skripts oder Code erforderlich sind. Diese Anwendung verwaltet und führt Komponenten aus, die ihr deklaratives Dokumentschema implementieren.

AWSTOE ist eine eigenständige Anwendung, die Image Builder auf seinen Build- und Testinstanzen installiert, wenn Sie ein Image erstellen. Sie können es auch manuell auf EC2 Instanzen installieren, um Ihre eigenen benutzerdefinierten Komponenten zu erstellen. Es erfordert keine zusätzliche Einrichtung und kann auch lokal ausgeführt werden.

**Topics**
+ [AWSTOE lädt herunter](#toe-downloads)
+ [Unterstützte Regionen](#toe-supported-regions)
+ [AWSTOE Befehlsreferenz](#toe-commands)
+ [Manuelles Setup zur Entwicklung kundenspezifischer Komponenten mit AWSTOE](toe-get-started.md)
+ [Verwenden Sie das AWSTOE Component Document Framework für benutzerdefinierte Komponenten](toe-use-documents.md)
+ [Aktionsmodule, die vom AWSTOE Komponentenmanager unterstützt werden](toe-action-modules.md)
+ [Eingabe für den Befehl AWSTOE run konfigurieren](toe-run-config-input.md)

## AWSTOE lädt herunter
<a name="toe-downloads"></a>

Wählen Sie zur Installation AWSTOE den Download-Link für Ihre Architektur und Plattform. Wenn Sie eine Verbindung zu einem VPC-Endpunkt für Ihren Service herstellen (z. B. Image Builder), muss diesem eine benutzerdefinierte Endpunktrichtlinie zugewiesen sein, die den Zugriff auf den S3-Bucket für AWSTOE Downloads beinhaltet. Andernfalls können Ihre Build- und Test-Instances das Bootstrap-Skript (`bootstrap.sh`) nicht herunterladen und die AWSTOE Anwendung nicht installieren. Weitere Informationen finden Sie unter [Erstellen Sie eine VPC-Endpunktrichtlinie für Image Builder](vpc-interface-endpoints.md#vpc-endpoint-policy).

**Wichtig**  
AWS stellt die Unterstützung für die TLS-Versionen 1.0 und 1.1 schrittweise ein. Um auf den S3-Bucket für AWSTOE Downloads zuzugreifen, muss Ihre Client-Software TLS Version 1.2 oder höher verwenden. Weitere Informationen finden Sie in diesem [AWS Sicherheits-Blogbeitrag](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/).


| Architektur | Plattform | Download-Link | Beispiel | 
| --- | --- | --- | --- | 
| 386 |  AL 2 und 2023 RHEL 7, 8 und 9 Ubuntu 16.04, 18.04, 20.04, 22.04 und 24.04 CentOS 7 und 8 SUSE 12 und 15  | `https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/386/awstoe`  | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/386/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/386/awstoe) | 
| AMD64 |  AL 2 und 2023 RHEL 7, 8 und 9 Ubuntu 16.04, 18.04, 20.04, 22.04 und 24.04 CentOS 7 und 8 CentOS Stream 8 SUSE 12 und 15  | https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/amd64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe) | 
| AMD64 |  macOS 10.14.x (Mojave), 10.15.x (Catalina), 11.x (Big Sur), 12.x (Monterey)  | https://awstoe-region.s3.region.amazonaws.com/latest/darwin/amd64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/darwin/amd64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/darwin/amd64/awstoe) | 
|  AMD64  |  Windows Server 2012 R2, 2016, 2019 und 2022  |   `https://awstoe-<region>.s3.<region>.amazonaws.com/latest/windows/amd64/awstoe.exe`  | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/windows/amd64/awstoe.exe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/windows/amd64/awstoe.exe) | 
| ARM64 |  AL 2 und 2023 RHEL 7, 8 und 9 Ubuntu 16.04, 18.04, 20.04, 22.04 und 24.04 CentOS 7 und 8 CentOS Stream 8 SUSE 12 und 15  | https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/arm64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/arm64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/arm64/awstoe) | 

## Unterstützte Regionen
<a name="toe-supported-regions"></a>

AWSTOE wird in den folgenden Regionen als eigenständige Anwendung unterstützt.


| AWS-Region Name | AWS-Region | 
| --- | --- | 
|  USA Ost (Ohio)  |  us-east-2  | 
|  USA Ost (Nord-Virginia)  |  us-east-1  | 
|  AWS GovCloud (US-Ost)  |  us-gov-east-1  | 
|  AWS GovCloud (US-West)  |  us-gov-west-1  | 
|  USA West (Nordkalifornien)  | us-west-1 | 
|  USA West (Oregon)  | us-west-2 | 
|  Afrika (Kapstadt)  | af-south-1 | 
|  Asien-Pazifik (Hongkong)  | ap-east-1 | 
|  Asia Pacific (Osaka)  | ap-northeast-3 | 
|  Asien-Pazifik (Seoul)  | ap-northeast-2 | 
|  Asien-Pazifik (Mumbai)  | ap-south-1 | 
|  Asien-Pazifik (Hyderabad)  | ap-south-2 | 
|  Asien-Pazifik (Singapur)  | ap-southeast-1 | 
|  Asien-Pazifik (Sydney)  | ap-southeast-2 | 
|  Asien-Pazifik (Jakarta)  | ap-southeast-3 | 
|  Asien-Pazifik (Tokio)  | ap-northeast-1 | 
|  Kanada (Zentral)  | ca-central-1 | 
|  Europa (Frankfurt)  | eu-central-1 | 
|  Europa (Zürich)  | eu-central-2 | 
|  Europa (Stockholm)  | eu-north-1 | 
|  Europa (Mailand)  | eu-south-1 | 
|  Europa (Spanien)  | eu-south-2 | 
|  Europa (Irland)  | eu-west-1 | 
|  Europa (London)  | eu-west-2 | 
|  Europa (Paris)  | eu-west-3 | 
|  Israel (Tel Aviv)  | il-central-1 | 
|  Naher Osten (VAE)  | me-central-1 | 
|  Naher Osten (Bahrain)  | me-south-1 | 
|  Südamerika (São Paulo)  | sa-east-1 | 
|  China (Beijing)  | cn-north-1 | 
|  China (Ningxia)  | cn-northwest-1 | 

## AWSTOE Befehlsreferenz
<a name="toe-commands"></a>

AWSTOE ist eine Befehlszeilen-Komponentenverwaltungsanwendung, die auf EC2 Amazon-Instances ausgeführt wird. Wenn Image Builder eine EC2 Build- oder Testinstanz startet, wird sie AWSTOE auf der Instanz installiert. Anschließend AWSTOE werden Befehle in der ausgeführt AWS CLI , um die Komponenten zu installieren oder zu validieren, die im Image- oder Container-Rezept angegeben sind.

**Anmerkung**  
Für einige AWSTOE Aktionsmodule sind erhöhte Zugriffsrechte erforderlich, um auf einem Linux-Server ausgeführt zu werden. Um erhöhte Berechtigungen zu verwenden, stellen Sie der Befehlssyntax ein Präfix voran**sudo**, oder führen Sie den **sudo su** Befehl einmal aus, wenn Sie sich anmelden, bevor Sie die unten verlinkten Befehle ausführen. Weitere Informationen zu AWSTOE Aktionsmodulen finden Sie unter[Aktionsmodule, die vom AWSTOE Komponentenmanager unterstützt werden](toe-action-modules.md).

***[run](#cmd-run)***  
Verwenden Sie den **run** Befehl, um die YAML-Dokumentskripts für ein oder mehrere Komponentendokumente auszuführen.

***[validieren](#cmd-validate)***  
Führen Sie den **validate** Befehl aus, um die YAML-Dokumentsyntax für ein oder mehrere Komponentendokumente zu überprüfen.

### awstoe run-Befehl
<a name="cmd-run"></a>

Mit diesem Befehl werden die YAML-Komponentendokumentskripts in der Reihenfolge ausgeführt, in der sie in der durch den Parameter angegebenen Konfigurationsdatei oder in der durch den `--config` Parameter angegebenen Liste der Komponentendokumente enthalten sind. `--documents`

**Anmerkung**  
Sie müssen genau einen der folgenden Parameter angeben, niemals beide:  
--config  
--dokumente

#### Syntax
<a name="run-syntax"></a>

```
awstoe run [--config <file path>] [--cw-ignore-failures <?>] 
      [--cw-log-group <?>] [--cw-log-region us-west-2] [--cw-log-stream <?>] 
      [--document-s3-bucket-owner <owner>] [--documents <file path,file path,...>] 
      [--execution-id <?>] [--log-directory <file path>] 
      [--log-s3-bucket-name <name>] [--log-s3-bucket-owner <owner>] 
      [--log-s3-key-prefix <?>] [--parameters name1=value1,name2=value2...] 
      [--phases <phase name>] [--state-directory <directory path>] [--version <?>] 
      [--help] [--trace]
```

#### Parameter und Optionen
<a name="run-parameters"></a>Parameter

**--config *`./config-example.json`***  
Kurzform: -c *`./config-example.json`*  
Die Konfigurationsdatei *(bedingt)*. Dieser Parameter enthält den Dateispeicherort für die JSON-Datei, die Konfigurationseinstellungen für die Komponenten enthält, die dieser Befehl ausführt. Wenn Sie **run** Befehlseinstellungen in einer Konfigurationsdatei angeben, dürfen Sie den `--documents` Parameter nicht angeben. Weitere Hinweise zur Eingabekonfiguration finden Sie unter[Eingabe für den Befehl AWSTOE run konfigurieren](toe-run-config-input.md).  
Zu den gültigen Standorten gehören:  
+ Ein lokaler Dateipfad (*`./config-example.json`*)
+ Ein S3-URI (`s3://bucket/key`)

**--cw-ignore-failures**  
Kurzform: N/A  
Ignorieren Sie Fehler bei der Protokollierung in den CloudWatch Protokollen.

**--cw-log-group**  
Kurzform: N/A  
Der `LogGroup` Name für die CloudWatch Logs.

**--cw-log-region**  
Kurzform: N/A  
Die AWS Region, die für die CloudWatch Logs gilt.

**--cw-log-stream**  
Kurzform: N/A  
Der `LogStream` Name für die CloudWatch Logs, der angibt, AWSTOE wohin die `console.log` Datei gestreamt werden soll.

**--document-s3-bucket-owner**  
Kurzform: N/A  
Die Konto-ID des Bucket-Besitzers für S3-URI-basierte Dokumente.

**--Dokumente *`./doc-1.yaml`,`./doc-n.yaml`***  
Kurzform: *`./doc-1.yaml`* -d, *`./doc-n`*  
Die Komponentendokumente *(bedingt)*. Dieser Parameter enthält eine durch Kommas getrennte Liste von Dateispeicherorten, an denen die Dokumente der YAML-Komponente ausgeführt werden sollen. Wenn Sie mithilfe des Parameters YAML-Dokumente für den **run** Befehl angeben, dürfen Sie den `--documents` Parameter nicht angeben. `--config`  
Zu den gültigen Speicherorten gehören:  
+ lokale Dateipfade (*./component-doc-example.yaml*).
+ S3 URIs (`s3://bucket/key`).
+ Build-Version der Image Builder-Komponente ARNs (arn:aws:imagebuilder:us-west--und 2021.12.02/1). *2:123456789012* *my-example-component*
Zwischen den Einträgen in der Liste gibt es keine Leerzeichen, nur Kommas.

**--execution-id**  
Kurzform: -i  
Dies ist die eindeutige ID, die für die Ausführung des aktuellen **run** Befehls gilt. Diese ID ist in den Namen der Ausgabe- und Protokolldateien enthalten, um diese Dateien eindeutig zu identifizieren und sie mit der aktuellen Befehlsausführung zu verknüpfen. Wenn diese Einstellung weggelassen wird, wird eine GUID AWSTOE generiert.

**--log-directory**  
Kurzform: -l  
Das Zielverzeichnis, in dem alle Protokolldateien dieser Befehlsausführung AWSTOE gespeichert werden. Standardmäßig befindet sich dieses Verzeichnis im folgenden übergeordneten Verzeichnis:`TOE_<DATETIME>_<EXECUTIONID>`. Wenn Sie das Protokollverzeichnis nicht angeben, AWSTOE wird das aktuelle Arbeitsverzeichnis (`.`) verwendet.

**--log-s3-Bucket-Name**  
Kurzform: -b  
Wenn Komponentenprotokolle in Amazon S3 gespeichert sind (empfohlen), werden die Komponentenanwendungsprotokolle in den in diesem Parameter genannten S3-Bucket AWSTOE hochgeladen.

**--log-s3-bucket-owner**  
Kurzform: N/A  
Wenn Komponentenprotokolle in Amazon S3 gespeichert werden (empfohlen), ist dies die Eigentümerkonto-ID für den Bucket, in den die Protokolldateien AWSTOE geschrieben werden.

**--log-s3-Schlüsselpräfix**  
Kurzform: -k  
Wenn Komponentenprotokolle in Amazon S3 gespeichert werden (empfohlen), ist dies das S3-Objektschlüsselpräfix für den Protokollspeicherort im Bucket.

**--parameters *name1* =*value1*, *name2* =*value2*...**  
Kurzform: N/A  
Parameter sind veränderbare Variablen, die im Komponentendokument definiert sind und deren Einstellungen die aufrufende Anwendung zur Laufzeit bereitstellen kann.

**--phasen**  
Kurzform: -p  
Eine durch Kommas getrennte Liste, die angibt, welche Phasen in den Dokumenten der YAML-Komponente ausgeführt werden sollen. Wenn ein Komponentendokument zusätzliche Phasen enthält, werden diese nicht ausgeführt.

**--state-directory**  
Kurzform: -s  
Der Dateipfad, in dem State-Tracking-Dateien gespeichert werden.

**--version**  
Kurzform: -v  
Gibt die Version der Komponentenanwendung an.Optionen

**-h**  
Kurzform: -h  
Zeigt ein Hilfehandbuch zur Verwendung der Anwendungsoptionen für die Komponentenverwaltung an.

**--trace**  
Kurzform: -t  
Aktiviert die ausführliche Protokollierung auf der Konsole.

### Befehl awstoe validate
<a name="cmd-validate"></a>

Wenn Sie diesen Befehl ausführen, validiert er die YAML-Dokumentsyntax für jedes der im Parameter angegebenen Komponentendokumente. `--documents`

#### Syntax
<a name="validate-syntax"></a>

```
awstoe validate [--document-s3-bucket-owner <owner>] 
      --documents <file path,file path,...> [--help] [--trace]
```

#### Parameter und Optionen
<a name="validate-parameters"></a>Parameter

**--document-s3-bucket-owner**  
Kurzform: N/A  
Quellkonto-ID der bereitgestellten S3-URI-basierten Dokumente.

**--Dokumente *`./doc-1.yaml`,`./doc-n.yaml`***  
Kurzform: *`./doc-1.yaml`* -d, *`./doc-n`*  
Die Komponentendokumente *(erforderlich)*. Dieser Parameter enthält eine durch Kommas getrennte Liste von Dateispeicherorten, an denen die YAML-Komponentendokumente ausgeführt werden sollen. Zu den gültigen Speicherorten gehören:  
+ lokale Dateipfade (*./component-doc-example.yaml*)
+ S3 URIs (`s3://bucket/key`)
+ Build-Version der Image Builder-Komponente ARNs (arn:aws:imagebuilder:us-west--und 2021.12.02/1) *2:123456789012* *my-example-component*
Zwischen den Einträgen in der Liste gibt es keine Leerzeichen, nur Kommas.Optionen

**-h**  
Kurzform: -h  
Zeigt ein Hilfehandbuch zur Verwendung der Anwendungsoptionen für die Komponentenverwaltung an.

**--trace**  
Kurzform: -t  
Aktiviert die ausführliche Protokollierung auf der Konsole.

# Manuelles Setup zur Entwicklung kundenspezifischer Komponenten mit AWSTOE
<a name="toe-get-started"></a>

Die AWS Task Orchestrator and Executor (AWSTOE) -Anwendung ist eine eigenständige Anwendung, die Befehle innerhalb eines Komponentendefinitionsframeworks erstellt, validiert und ausführt. AWS Dienste können verwendet werden, AWSTOE um Workflows zu orchestrieren, Software zu installieren, Systemkonfigurationen zu ändern und Image-Builds zu testen.

Gehen Sie wie folgt vor, um die AWSTOE Anwendung manuell zu installieren und sie als eigenständige Anwendung zur Entwicklung benutzerdefinierter Komponenten zu verwenden. Image Builder erledigt diese Schritte für Sie, wenn Sie die Image Builder Builder-Konsole oder AWS CLI Befehle verwenden, um benutzerdefinierte Komponenten zu erstellen. Weitere Informationen finden Sie unter [Erstellen Sie benutzerdefinierte Komponenten mit Image Builder](create-component.md).

# Überprüfen Sie die Signatur des AWSTOE Installationsdownloads
<a name="awstoe-verify-sig"></a>

In diesem Abschnitt wird das empfohlene Verfahren zur Überprüfung der Gültigkeit des Installationsdownloads für AWSTOE Linux-, macOS- und Windows-basierte Betriebssysteme beschrieben.

**Topics**
+ [Überprüfen Sie die Signatur des AWSTOE Installationsdownloads unter Linux oder macOS](#awstoe-verify-sig-linux)
+ [Überprüfen Sie die Signatur des AWSTOE Installationsdownloads unter Windows](#awstoe-verify-sig-win)

## Überprüfen Sie die Signatur des AWSTOE Installationsdownloads unter Linux oder macOS
<a name="awstoe-verify-sig-linux"></a>

In diesem Thema wird das empfohlene Verfahren zur Überprüfung der Gültigkeit des Installations-Downloads für AWSTOE Linux- oder macOS-Betriebssysteme beschrieben.

Wenn Sie eine Anwendung aus dem Internet herunterladen, empfehlen wir Ihnen, die Identität des Softwareherausgebers zu authentifizieren. Stellen Sie außerdem sicher, dass die Anwendung seit ihrer Veröffentlichung nicht verändert oder beschädigt wurde. Dies schützt Sie davor, eine Version der Anwendung zu installieren, die einen Virus oder einen anderen bösartigen Code enthält.

Wenn Sie nach Ausführung der Schritte in diesem Thema feststellen, dass die Software für die AWSTOE Anwendung verändert oder beschädigt ist, führen Sie die Installationsdatei nicht aus. Wenden Sie sich stattdessen an Support Weitere Informationen zu Ihren Supportoptionen finden Sie unter [Support](https://aws.amazon.com/premiumsupport/).

AWSTOE Dateien für Linux- und macOS-Betriebssysteme werden mit `GnuPG` einer Open-Source-Implementierung des Pretty Good Privacy (OpenPGP) -Standards für sichere digitale Signaturen signiert. `GnuPG`(auch bekannt als`GPG`) ermöglicht Authentifizierung und Integritätsprüfung mithilfe einer digitalen Signatur. Amazon EC2 veröffentlicht einen öffentlichen Schlüssel und Signaturen, mit denen Sie die heruntergeladenen Amazon EC2 EC2-CLI-Tools überprüfen können. Weitere Informationen zu `PGP` und `GnuPG` (`GPG`) finden Sie [unter http://www.gnupg.org](https://www.gnupg.org/).

Der erste Schritt besteht darin, eine Vertrauensstellung mit dem Software-Publisher zu schaffen. Laden Sie den öffentlichen Schlüssel des Softwareherausgebers herunter, überprüfen Sie, ob der Besitzer des öffentlichen Schlüssels derjenige ist, der er behauptet zu sein, und fügen Sie dann den öffentlichen Schlüssel zu Ihrem *Schlüsselbund hinzu*. Ihr Schlüsselbund ist eine Sammlung von bekannten öffentlichen Schlüsseln. Nachdem Sie die Echtheit des öffentlichen Schlüssels überprüft haben, können Sie ihn verwenden, um die Signatur der Anwendung zu überprüfen.

**Topics**
+ [Installieren der GPG-Tools](#awstoe-verify-signature-of-binary-download-install-tools)
+ [Authentifizieren und Importieren des öffentlichen Schlüssels](#awstoe-verify-signature-of-binary-download-authenticate-import-public-key)
+ [Verifizieren der Signatur des Pakets](#awstoe-verify-signature-of-binary-package)

### Installieren der GPG-Tools
<a name="awstoe-verify-signature-of-binary-download-install-tools"></a>

Wenn Ihr Betriebssystem Linux, Unix oder macOS ist, sind die GPG-Tools wahrscheinlich bereits installiert. Um zu testen, ob die Tools auf Ihrem System installiert sind, geben Sie **gpg** in einer Eingabeaufforderung ein. Wenn die GPG-Tools installiert sind, sehen Sie eine Eingabeaufforderung. Wenn die GPG-Tools nicht installiert sind, wird eine Fehlermeldung angezeigt, die besagt, dass der Befehl nicht gefunden werden kann. Sie können das GnuPG-Paket von einem Repository aus installieren.

Um die GPG-Tools zu installieren, wählen Sie das Betriebssystem aus, das zu Ihrer Instanz passt.

------
#### [ Debian-based Linux ]

Führen Sie von einem Terminal folgenden Befehl aus:

```
apt-get install gnupg
```

------
#### [ Red Hat–based Linux ]

Führen Sie von einem Terminal folgenden Befehl aus:

```
yum install gnupg
```

------
#### [ macOS ]

Führen Sie von einem Terminal folgenden Befehl aus:

```
brew install gnupg
```

------

### Authentifizieren und Importieren des öffentlichen Schlüssels
<a name="awstoe-verify-signature-of-binary-download-authenticate-import-public-key"></a>

Der nächste Schritt in diesem Prozess besteht darin, den AWSTOE öffentlichen Schlüssel zu authentifizieren und ihn als vertrauenswürdigen Schlüssel zu Ihrem `GPG` Schlüsselbund hinzuzufügen.

**Um den öffentlichen Schlüssel zu authentifizieren und zu importieren AWSTOE**

1. Besorgen Sie sich ein Exemplar unseres öffentlichen `GPG`-Schlüssels, indem Sie einen der folgenden Schritte ausführen:
   + Laden Sie den Schlüssel von herunter

      https://awstoe - **<region>** .s3. **<region>**.amazonaws. com/assets/awstoe.gpg. Beispiel, [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg).
   + Kopieren Sie den Schlüssel aus dem folgenden Text und fügen Sie ihn in eine Datei namens `awstoe.gpg` ein. Vergewissern Sie sich, alles Folgende einzubeziehen:

     ```
     -----BEGIN PGP PUBLIC KEY BLOCK-----
     Version: GnuPG v2
     
     mQENBF8UqwsBCACdiRF2bkZYaFSDPFC+LIkWLwFvtUCRwAHtD8KIwTJ6LVn3fHAU
     GhuK0ZH9mRrqRT2bq/xJjGsnF9VqTj2AJqndGJdDjz75YCZYM+ocZ+r5HSJaeW9i
     S5dykHj7Txti2zHe0G5+W0v7v5bPi2sPHsN7XWQ7+G2AMEPTz8PjxY//I0DvMQns
     Sle3l9hz6wCClz1l9LbBzTyHfSm5ucTXvNe88XX5Gmt37OCDM7vfli0Ctv8WFoLN
     6jbxuA/sV71yIkPm9IYp3+GvaKeT870+sn8/JOOKE/U4sJV1ppbqmuUzDfhrZUaw
     8eW8IN9A1FTIuWiZED/5L83UZuQs1S7s2PjlABEBAAG0GkFXU1RPRSA8YXdzdG9l
     QGFtYXpvbi5jb20+iQE5BBMBCAAjBQJfFKsLAhsDBwsJCAcDAgEGFQgCCQoLBBYC
     AwECHgECF4AACgkQ3r3BVvWuvFJGiwf9EVmrBR77+Qe/DUeXZJYoaFr7If/fVDZl
     6V3TC6p0J0Veme7uXleRUTFOjzbh+7e5sDX19HrnPquzCnzfMiqbp4lSoeUuNdOf
     FcpuTCQH+M+sIEIgPno4PLl0Uj2uE1o++mxmonBl/Krk+hly8hB2L/9n/vW3L7BN
     OMb1Ll9PmgGPbWipcT8KRdz4SUex9TXGYzjlWb3jU3uXetdaQY1M3kVKE1siRsRN
     YYDtpcjmwbhjpu4xm19aFqNoAHCDctEsXJA/mkU3erwIRocPyjAZE2dnlkL9ZkFZ
     z9DQkcIarbCnybDM5lemBbdhXJ6hezJE/b17VA0t1fY04MoEkn6oJg==
     =oyze
     -----END PGP PUBLIC KEY BLOCK-----
     ```

1. Verwenden Sie an einer Befehlszeile in dem Verzeichnis, in dem Sie **awstoe.gpg** gespeichert haben, den folgenden Befehl, um den öffentlichen Schlüssel in Ihren Schlüsselbund zu importieren. AWSTOE 

   ```
   gpg --import awstoe.gpg
   ```

   Der Befehl gibt Ergebnisse wie die folgenden zurück:

   ```
   gpg: key F5AEBC52: public key "AWSTOE <awstoe@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

   Notieren Sie sich den Schlüsselwert. Sie brauchen ihn im nächsten Schritt. Im vorangegangenen Beispiel ist der Schlüsselwert `F5AEBC52`.

1. Überprüfen Sie den Fingerabdruck, indem Sie den folgenden Befehl ausführen und *Schlüssel-Wert* durch den Wert des vorherigen Schritts ersetzen:

   ```
   gpg --fingerprint key-value
   ```

   Dieser Befehl gibt Ergebnisse wie die folgenden zurück:

   ```
   pub   2048R/F5AEBC52 2020-07-19
         Key fingerprint = F6DD E01C 869F D639 15E5  5742 DEBD C156 F5AE BC52
   uid       [ unknown] AWSTOE <awstoe@amazon.com>
   ```

   Zusätzlich sollte der Fingerabdruck-String identisch mit `F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52` sein, wie im voranstehenden Beispiel angezeigt. Vergleichen Sie den Schlüssel-Fingerabdruck mit demjenigen, der auf dieser Seite veröffentlicht ist. Sie sollten übereinstimmen. Wenn sie nicht übereinstimmen, installieren Sie das AWSTOE Installationsskript nicht und kontaktieren Sie uns. Support

### Verifizieren der Signatur des Pakets
<a name="awstoe-verify-signature-of-binary-package"></a>

Nachdem Sie die `GPG`-Tools installiert, den öffentlichen Schlüssel für AWSTOE authentifiziert und importiert und überprüfen haben, dass der öffentliche Schlüssel vertrauenswürdig ist, sind Sie bereit, die Signatur des Installationsskripts zu überprüfen. 

**So überprüfen Sie die Signatur des -Installationsskripts**

1. Führen Sie an der Befehlszeile den folgenden Befehl aus, um die Binärdatei der Anwendung herunterzuladen:

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe
   ```

   Beispiel:

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe
   ```

   Unterstützte Werte für **architecture** können `amd64``386`, und sein`arm64`.

1. Führen Sie an einer Befehlszeile den folgenden Befehl aus, um die Signaturdatei für die entsprechende Anwendungsbinärdatei aus demselben S3-Schlüsselpräfixpfad herunterzuladen:

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe.sig
   ```

   Beispiel:

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe.sig
   ```

   Unterstützte Werte für **architecture** können `amd64``386`, und sein`arm64`.

1. Überprüfen Sie die Signatur, indem Sie in der Befehlszeile in dem Verzeichnis, in dem Sie die Datei gespeichert haben`awstoe.sig`, den folgenden AWSTOE Befehl ausführen. Beide Dateien müssen vorhanden sein.

   ```
   gpg --verify ./awstoe.sig ~/awstoe
   ```

   Die Ausgabe sollte wie folgt aussehen:

   ```
   gpg: Signature made Mon 20 Jul 2020 08:54:55 AM IST using RSA key ID F5AEBC52
   gpg: Good signature from "AWSTOE awstoe@amazon.com" [unknown]
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52
   ```

   Wenn die Ausgabe den Begriff `Good signature from "AWSTOE <awstoe@amazon.com>"` enthält, bedeutet dies, dass die Signatur erfolgreich überprüft wurde und Sie mit der Ausführung des AWSTOE -Installationsskripts fortfahren können.

   Wenn die Ausgabe die Bezeichnung `BAD signature`enthält, überprüfen Sie, ob Sie das Verfahren korrekt durchgeführt haben. Wenn Sie weiterhin diese Antwort erhalten, führen Sie die Installationsdatei, die Sie zuvor heruntergeladen haben, nicht aus und wenden Sie sich an Support.

Im Folgenden finden Sie Details zu den Warnungen, die möglicherweise angezeigt werden: 
+ **WARNUNG: Dieser Schlüssel ist nicht mit einer vertrauenswürdigen Signatur zertifiziert\$1 Es gibt keinen Hinweis darauf, dass die Signatur dem Besitzer gehört.** Idealerweise besuchen Sie ein AWS Büro und erhalten den Schlüssel persönlich. Sie würden es jedoch höchstwahrscheinlich von einer Website herunterladen. In diesem Fall ist die Website eine AWS Website. 
+ **gpg: Keine endgültig vertrauenswürdigen Schlüssel gefunden** Das bedeutet, dass Sie oder andere Personen, denen Sie vertrauen, dem spezifischen Schlüssel „letztendlich nicht vertrauen“.

Weitere Informationen finden Sie unter [http://www.gnupg.org](http://www.gnupg.org).

## Überprüfen Sie die Signatur des AWSTOE Installationsdownloads unter Windows
<a name="awstoe-verify-sig-win"></a>

In diesem Thema wird das empfohlene Verfahren zur Überprüfung der Gültigkeit der Installationsdatei für die AWS Task Orchestrator and Executor Anwendung auf Windows-Betriebssystemen beschrieben. 

Wenn Sie eine Anwendung aus dem Internet herunterladen, empfehlen wir Ihnen, die Identität des Softwareverlegers zu authentifizieren und zu überprüfen, ob die Anwendung seit ihrer Veröffentlichung nicht verändert oder beschädigt wurde. Dies schützt Sie davor, eine Version der Anwendung zu installieren, die einen Virus oder einen anderen bösartigen Code enthält.

Wenn Sie nach Ausführung der Schritte in diesem Thema feststellen, dass die Software für die AWSTOE Anwendung verändert oder beschädigt ist, führen Sie die Installationsdatei nicht aus. Wenden Sie sich stattdessen an Support.

Um die Gültigkeit der heruntergeladenen awstoe-Binärdatei auf Windows-basierten Betriebssystemen zu überprüfen, stellen Sie sicher, dass der Fingerabdruck des zugehörigen Amazon Services LLC-Unterzeichnerzertifikats diesem Wert entspricht:

**9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

**Anmerkung**  
Während des Rollout-Fensters für eine neue Binärdatei stimmt Ihr Unterzeichnerzertifikat möglicherweise nicht mit dem neuen Fingerabdruck überein. Wenn Ihr Unterzeichnerzertifikat nicht übereinstimmt, überprüfen Sie, ob der Fingerabdruckwert wie folgt lautet:   
**BA 81 25 EE AC 64 2E A9 F3 C5 93 CA 6D 3E B7 93 7D 68 75 74**

Um diesen Wert zu überprüfen, gehen Sie wie folgt vor: 

1. Klicken Sie mit der rechten Maustaste auf die heruntergeladen `awstoe.exe`, und öffnen Sie das **Eigenschaften**-Fenster.

1. Wählen Sie die Registerkarte **Digital Signatures** aus.

1. Wählen Sie in der **Signature List** die Option **Amazon Services LLC** und dann **Details** aus.

1. Falls die Registerkarte **General** nicht bereits ausgewählt ist, klicken Sie darauf und dann auf **View Certificate**.

1. Wählen Sie die Registerkarte **Details** aus, und anschließend die Option **All (Alle)** in der Dropdown-Liste **Show (Zeigen)**, wenn diese nicht bereits ausgewählt ist.

1. Scrollen Sie nach unten zum Feld **Thumbprint** und wählen Sie **Thumbprint** aus. Der gesamte Thumbprint-Wert wird im unteren Fenster angezeigt.
   + Wenn der Thumbprint-Wert im unteren Fenster mit folgendem Wert identisch ist:

     **9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

     dann ist Ihre heruntergeladene AWSTOE Binärdatei authentisch und kann sicher installiert werden.
   + Wenn der Fingerabdruckwert im unteren Detailfenster nicht mit dem vorherigen Wert identisch ist, führen Sie den Vorgang nicht aus. `awstoe.exe`

**Topics**
+ [Überprüfen Sie die Signatur des AWSTOE Installationsdownloads](awstoe-verify-sig.md)
+ [Schritt 1: Installieren AWSTOE](#toe-start-install)
+ [Schritt 2: Legen Sie die AWS Anmeldeinformationen fest](#toe-start-credentials)
+ [Schritt 3: Komponentendokumente lokal entwickeln](#toe-start-develop)
+ [Schritt 4: AWSTOE Komponenten validieren](#toe-start-validate)
+ [Schritt 5: AWSTOE Komponenten ausführen](#toe-start-run)

## Schritt 1: Installieren AWSTOE
<a name="toe-start-install"></a>

Um Komponenten lokal zu entwickeln, laden Sie die AWSTOE Anwendung herunter und installieren Sie sie.

1. 

**Laden Sie die AWSTOE Anwendung herunter**

   Wählen Sie zur Installation AWSTOE den entsprechenden Download-Link für Ihre Architektur und Plattform. Die vollständige Liste der Links zum Herunterladen von Anwendungen finden Sie unter [AWSTOE lädt herunter](toe-component-manager.md#toe-downloads)
**Wichtig**  
AWS stellt die Unterstützung für die TLS-Versionen 1.0 und 1.1 schrittweise ein. Um auf den S3-Bucket für AWSTOE Downloads zuzugreifen, muss Ihre Client-Software TLS Version 1.2 oder höher verwenden. Weitere Informationen finden Sie in diesem [AWS Sicherheits-Blogbeitrag](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/).

1. 

**Überprüfen Sie die Signatur**

   Die Schritte zur Überprüfung Ihres Downloads hängen von der Serverplattform ab, auf der Sie die AWSTOE Anwendung nach der Installation ausführen. Informationen zur Überprüfung Ihres Downloads auf einem Linux-Server finden Sie unter[Überprüfen Sie die Signatur unter Linux oder macOS](awstoe-verify-sig.md#awstoe-verify-sig-linux). Informationen zur Überprüfung Ihres Downloads auf einem Windows-Server finden Sie unter[Überprüfen Sie die Signatur unter Windows](awstoe-verify-sig.md#awstoe-verify-sig-win).

**Anmerkung**  
AWSTOE wird direkt von seinem Download-Speicherort aus aufgerufen. Ein separater Installationsschritt ist nicht erforderlich. Dies bedeutet auch, dass Änderungen an der lokalen Umgebung vorgenommen werden AWSTOE können.  
Um sicherzustellen, dass Sie Änderungen während der Komponentenentwicklung isolieren, empfehlen wir, eine EC2 Instanz zum Entwickeln und Testen von AWSTOE Komponenten zu verwenden.

## Schritt 2: Legen Sie die AWS Anmeldeinformationen fest
<a name="toe-start-credentials"></a>

 AWSTOE erfordert AWS Anmeldeinformationen AWS-Services, um eine Verbindung zu anderen Geräten wie Amazon S3 und Amazon herzustellen CloudWatch, wenn Aufgaben ausgeführt werden, wie z. B.: 
+  AWSTOE Dokumente werden von einem vom Benutzer bereitgestellten Amazon S3-Pfad heruntergeladen.
+ Laufende Module `S3Download` oder `S3Upload` Aktionsmodule.
+ Streaming-Protokolle an CloudWatch, wenn aktiviert.

Wenn Sie AWSTOE auf einer EC2 Instance arbeiten, werden für die Ausführung dieselben Berechtigungen AWSTOE verwendet wie für die IAM-Rolle, die der EC2 Instance zugewiesen ist.

Weitere Informationen zu IAM-Rollen für EC2 finden Sie unter [IAM-Rollen für Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html). EC2

Die folgenden Beispiele zeigen, wie AWS Anmeldeinformationen mithilfe der `AWS_SECRET_ACCESS_KEY` Umgebungsvariablen `AWS_ACCESS_KEY_ID` und festgelegt werden. 

Um diese Variablen unter Linux, macOS oder Unix festzulegen, verwenden Sie`export`.

```
export AWS_ACCESS_KEY_ID=your_access_key_id
```

```
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

Um diese Variablen unter Windows mit festzulegen PowerShell, verwenden Sie`$env`.

```
$env:AWS_ACCESS_KEY_ID=your_access_key_id
```

```
$env:AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

Um diese Variablen unter Windows über die Befehlszeile festzulegen, verwenden Sie`set`.

```
set AWS_ACCESS_KEY_ID=your_access_key_id
```

```
set AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

## Schritt 3: Komponentendokumente lokal entwickeln
<a name="toe-start-develop"></a>

Komponenten werden mit Klartext-YAML-Dokumenten erstellt. Weitere Hinweise zur Dokumentensyntax finden Sie unter. [Verwenden Sie das AWSTOE Component Document Framework für benutzerdefinierte Komponenten](toe-use-documents.md)

Im Folgenden finden Sie Beispieldokumente für die Komponente *Hello World*, die Ihnen den Einstieg erleichtern sollen.

------
#### [ Linux ]

Einige Beispiele für Linux-Komponenten in diesem Handbuch beziehen sich auf eine Komponentendokumentdatei mit dem Namen`hello-world-linux.yml`. Sie können das folgende Dokument verwenden, um mit diesen Beispielen zu beginnen.

```
name: Hello World
description: This is hello world testing document for Linux.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------
#### [ Windows ]

Einige der Beispiele für Windows-Komponenten in diesem Handbuch beziehen sich auf eine Komponentendokumentdatei mit dem Namen`hello-world-windows.yml`. Sie können das folgende Dokument verwenden, um mit diesen Beispielen zu beginnen.

```
name: Hello World
description: This is Hello World testing document for Windows.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the test phase.'
```

------
#### [ macOS ]

Einige der Beispiele für macOS-Komponenten in diesem Handbuch beziehen sich auf eine Komponentendokumentdatei mit dem Namen`hello-world-macos.yml`. Sie können das folgende Dokument verwenden, um mit diesen Beispielen zu beginnen.

```
name: Hello World
description: This is hello world testing document for macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------

## Schritt 4: AWSTOE Komponenten validieren
<a name="toe-start-validate"></a>

Sie können die Syntax von AWSTOE Komponenten lokal mit der AWSTOE Anwendung überprüfen. Die folgenden Beispiele zeigen den AWSTOE `validate` Anwendungsbefehl zur Validierung der Syntax einer Komponente, ohne sie auszuführen.

**Anmerkung**  
Die AWSTOE Anwendung kann nur die Komponentensyntax für das aktuelle Betriebssystem überprüfen. Wenn Sie beispielsweise `awstoe.exe` unter Windows ausgeführt werden, können Sie die Syntax für ein Linux-Dokument, das das `ExecuteBash` Aktionsmodul verwendet, nicht überprüfen.

Linux oder macOS

```
awstoe validate --documents /home/user/hello-world.yml
```

Windows

```
awstoe.exe validate --documents C:\Users\user\Documents\hello-world.yml
```

## Schritt 5: AWSTOE Komponenten ausführen
<a name="toe-start-run"></a>

Die AWSTOE Anwendung kann mithilfe des `--phases` Befehlszeilenarguments eine oder mehrere Phasen bestimmter Dokumente ausführen. Unterstützte Werte für `--phases` sind `build``validate`, und`test`. Mehrere Phasenwerte können als kommagetrennte Werte eingegeben werden.

Wenn Sie eine Liste von Phasen bereitstellen, führt die AWSTOE Anwendung nacheinander die angegebenen Phasen jedes Dokuments aus. AWSTOE Führt beispielsweise die `validate` Phasen `build` und von aus`document1.yaml`, gefolgt von den `validate` Phasen `build` und von`document2.yaml`.

Um sicherzustellen, dass Ihre Protokolle sicher gespeichert und zur Fehlerbehebung aufbewahrt werden, empfehlen wir, die Protokollspeicherung in Amazon S3 zu konfigurieren. In Image Builder ist der Amazon S3 S3-Speicherort für die Veröffentlichung von Protokollen in der Infrastrukturkonfiguration angegeben. Weitere Informationen zur Infrastrukturkonfiguration finden Sie unter [Image Builder Builder-Infrastrukturkonfiguration verwalten](manage-infra-config.md)

Wenn keine Liste der Phasen bereitgestellt wird, führt die AWSTOE Anwendung alle Phasen in der Reihenfolge aus, die im YAML-Dokument aufgeführt ist.

Verwenden Sie die folgenden Befehle, um bestimmte Phasen in einem oder mehreren Dokumenten auszuführen.

Einphasig

```
awstoe run --documents hello-world.yml --phases build
```

Mehrere Phasen

```
awstoe run --documents hello-world.yml --phases build,test
```

**Dokument ausführen**  
Führen Sie alle Phasen in einem einzigen Dokument aus

```
awstoe run --documents documentName.yaml
```

Führen Sie alle Phasen in mehreren Dokumenten aus

```
awstoe run --documents documentName1.yaml,documentName2.yaml
```

Geben Sie Amazon S3 S3-Informationen ein, um AWSTOE Protokolle von einem benutzerdefinierten lokalen Pfad hochzuladen (empfohlen)

```
awstoe run --documents documentName.yaml --log-s3-bucket-name amzn-s3-demo-destination-bucket --log-s3-key-prefix S3KeyPrefix --log-s3-bucket-owner S3BucketOwner --log-directory local_path
```

Führen Sie alle Phasen in einem einzigen Dokument aus und zeigen Sie alle Protokolle auf der Konsole an

```
awstoe run --documents documentName.yaml --trace
```

-Beispielbefehl

```
awstoe run --documents s3://bucket/key/doc.yaml --phases build,validate
```

Dokument mit eindeutiger ID ausführen

```
awstoe run --documents documentName.yaml --execution-id user-provided-id --phases build,test
```

Holen Sie sich Hilfe bei AWSTOE

```
awstoe --help
```

# Verwenden Sie das AWSTOE Component Document Framework für benutzerdefinierte Komponenten
<a name="toe-use-documents"></a>

Um eine Komponente mithilfe des Komponenten-Frameworks AWS Task Orchestrator and Executor (AWSTOE) zu erstellen, müssen Sie ein YAML-basiertes Dokument bereitstellen, das die Phasen und Schritte darstellt, die für die von Ihnen erstellte Komponente gelten. AWS-Services verwenden Sie Ihre Komponente, wenn sie ein neues Amazon Machine Image (AMI) oder Container-Image erstellen.

**Topics**
+ [Workflow für Komponenten-Dokumente](#component-doc-workflow)
+ [Protokollierung von Komponenten](#component-logging)
+ [Verkettung von Eingabe und Ausgabe](#document-chaining)
+ [Schema und Definitionen des Dokuments](#document-schema)
+ [Beispiele für Dokumente](#document-example)
+ [Verwenden Sie Variablen in Ihrem Dokument mit benutzerdefinierten Komponenten](toe-user-defined-variables.md)
+ [Verwenden Sie bedingte Konstrukte in AWSTOE](toe-conditional-constructs.md)
+ [Verwenden Sie Vergleichsoperatoren in AWSTOE Komponentendokumenten](toe-comparison-operators.md)
+ [Verwenden Sie logische Operatoren in AWSTOE Komponentendokumenten](toe-logical-operators.md)
+ [Verwenden Sie Looping-Konstrukte in AWSTOE](toe-looping-constructs.md)

## Workflow für Komponenten-Dokumente
<a name="component-doc-workflow"></a>

Das AWSTOE Komponentendokument verwendet Phasen und Schritte, um verwandte Aufgaben zu gruppieren und diese Aufgaben in einem logischen Workflow für die Komponente zu organisieren.

**Tipp**  
Der Dienst, der Ihre Komponente zum Erstellen eines Images verwendet, implementiert möglicherweise Regeln darüber, welche Phasen für den Build-Prozess verwendet werden sollen und wann diese Phasen ausgeführt werden dürfen. Dies ist wichtig, wenn Sie Ihre Komponente entwerfen.

**Phasen**  
Phasen stellen den Verlauf Ihres Workflows durch den Image-Erstellungsprozess dar. Beispielsweise verwendet der Image Builder Builder-Dienst die `validate` Phasen `build` und Phasen während der *Erstellungsphase* für die von ihm erstellten Images. Es verwendet die `container-host-test` Phasen `test` und während der *Testphase*, um sicherzustellen, dass der Image-Snapshot oder das Container-Image die erwarteten Ergebnisse liefert, bevor das endgültige AMI erstellt oder das Container-Image verteilt wird.

Wenn die Komponente ausgeführt wird, werden die zugehörigen Befehle für jede Phase in der Reihenfolge angewendet, in der sie im Komponentendokument erscheinen.

**Regeln für Phasen**
+ Jeder Phasenname muss innerhalb eines Dokuments eindeutig sein.
+ Sie können viele Phasen in Ihrem Dokument definieren.
+ Sie müssen mindestens eine der folgenden Phasen in Ihr Dokument aufnehmen:
  + **build** — für Image Builder wird diese Phase in der Regel während der *Buildphase* verwendet.
  + **validieren** — für Image Builder wird diese Phase in der Regel während der *Erstellungsphase* verwendet.
  + **test** — für Image Builder wird diese Phase im Allgemeinen während der *Testphase* verwendet.
+ Phasen werden immer in der Reihenfolge ausgeführt, in der sie im Dokument definiert sind. Die Reihenfolge, in der sie für AWSTOE Befehle in angegeben sind, AWS CLI hat keine Auswirkung.

**Schritte**  
Schritte sind einzelne Arbeitseinheiten, die den Arbeitsablauf innerhalb jeder Phase definieren. Die Schritte werden nacheinander ausgeführt. Die Eingabe oder Ausgabe für einen Schritt kann jedoch auch als Eingabe in einen nachfolgenden Schritt einfließen. Dies wird als „Verkettung“ bezeichnet.

**Regeln für Schritte**
+ Der Schrittname muss für die Phase eindeutig sein.
+ Der Schritt muss eine unterstützte Aktion (Aktionsmodul) verwenden, die einen Exit-Code zurückgibt.

  Eine vollständige Liste der unterstützten Aktionsmodule, deren Funktionsweise, input/output Werte und Beispiele finden Sie unter[Aktionsmodule, die vom AWSTOE Komponentenmanager unterstützt werden](toe-action-modules.md).

## Protokollierung von Komponenten
<a name="component-logging"></a>

AWSTOE erstellt bei jeder Ausführung Ihrer Komponente einen neuen Protokollordner auf den EC2-Instances, die zum Erstellen und Testen eines neuen Images verwendet werden. Bei Container-Images wird der Protokollordner im Container gespeichert.

Zur Unterstützung bei der Problembehandlung, falls bei der Erstellung des Images ein Fehler auftritt, werden das Eingabedokument und alle Ausgabedateien, die bei der Ausführung der Komponente AWSTOE erstellt werden, im Protokollordner gespeichert.

Der Name des Protokollordners besteht aus den folgenden Teilen:

1. **Protokollverzeichnis** — Wenn ein Dienst eine AWSTOE Komponente ausführt, übergibt sie das Protokollverzeichnis zusammen mit anderen Einstellungen für den Befehl. In den folgenden Beispielen zeigen wir das Protokolldateiformat, das Image Builder verwendet.
   + **Linux und macOS**: `/var/lib/amazon/toe/`
   + **Windows**: `$env:ProgramFiles\Amazon\TaskOrchestratorAndExecutor\`

1. **Dateipräfix** — Dies ist ein Standardpräfix, das für alle Komponenten verwendet wird: "`TOE_`“.

1. **Laufzeit — Dies ist ein Zeitstempel** im Format YYYY-MM-DD \$1HH-MM-SS\$1UTC-0.

1. **Ausführungs-ID — Dies ist die GUID**, die zugewiesen wird, wenn eine oder mehrere Komponenten ausgeführt werden. AWSTOE 

Beispiel: `/var/lib/amazon/toe/TOE_2021-07-01_12-34-56_UTC-0_a1bcd2e3-45f6-789a-bcde-0fa1b2c3def4`

AWSTOE speichert die folgenden Kerndateien im Protokollordner:

**Eingabedateien**
+ **document.yaml** — Das Dokument, das als Eingabe für den Befehl verwendet wird. Nachdem die Komponente ausgeführt wurde, wird diese Datei als Artefakt gespeichert.

**Ausgabedateien**
+ **application.log** — Das Anwendungsprotokoll enthält Informationen auf Debug-Ebene mit Zeitstempel AWSTOE darüber, was passiert, während die Komponente ausgeführt wird.
+ **detailedoutput.json** — Diese JSON-Datei enthält detaillierte Informationen zum Ausführungsstatus, zu Eingaben, Ausgaben und Fehlern für alle Dokumente, Phasen und Schritte, die für die Komponente gelten, während sie ausgeführt wird.
+ **console.log** — Das Konsolenprotokoll enthält alle Standardausgangsinformationen (stdout) und Standardfehlerinformationen (stderr), die in die Konsole AWSTOE geschrieben werden, während die Komponente ausgeführt wird.
+ **chaining.json** — Diese JSON-Datei stellt Optimierungen dar, die zur Auflösung von Verkettungsausdrücken angewendet wurden. AWSTOE 

**Anmerkung**  
Der Protokollordner kann auch andere temporäre Dateien enthalten, die hier nicht behandelt werden.

## Verkettung von Eingabe und Ausgabe
<a name="document-chaining"></a>

Die AWSTOE Konfigurationsverwaltungsanwendung bietet eine Funktion zum Verketten von Eingaben und Ausgaben, indem Verweise in den folgenden Formaten geschrieben werden:

`{{ phase_name.step_name.inputs/outputs.variable }}`

oder

`{{ phase_name.step_name.inputs/outputs[index].variable }}`

Mit der Verkettungsfunktion können Sie Code recyceln und die Wartbarkeit des Dokuments verbessern.

**Regeln für die Verkettung**
+ Verkettungsausdrücke können nur im Eingabebereich jedes Schritts verwendet werden.
+ Anweisungen mit verketteten Ausdrücken müssen in Anführungszeichen gesetzt werden. Beispiel:
  + **Ungültiger Ausdruck**: `echo {{ phase.step.inputs.variable }}`
  + **Gültiger Ausdruck**: `"echo {{ phase.step.inputs.variable }}"`
  + **Gültiger Ausdruck**: `'echo {{ phase.step.inputs.variable }}'`
+ Durch Verkettung von Ausdrücken können Variablen aus anderen Schritten und Phasen desselben Dokuments referenziert werden. Der aufrufende Dienst verfügt jedoch möglicherweise über Regeln, nach denen Verkettungsausdrücke nur im Kontext einer einzelnen Phase ausgeführt werden dürfen. Image Builder unterstützt beispielsweise keine Verkettung von der *Buildphase* zur *Testphase, da jede Phase* unabhängig ausgeführt wird.
+ Indizes in der Verkettung von Ausdrücken folgen einer nullbasierten Indizierung. Der Index beginnt mit Null (0), um auf das erste Element zu verweisen.

**Beispiele**

Um im zweiten Eintrag des folgenden Beispielschritts auf die Quellvariable zu verweisen, lautet `{{ build.SampleS3Download.inputs[1].source }}` das Verkettungsmuster.

```
phases:
  - name: 'build'
    steps:
      - name: SampleS3Download
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://sample-bucket/sample1.ps1'
            destination: 'C:\sample1.ps1'
          - source: 's3://sample-bucket/sample2.ps1'
            destination: 'C:\sample2.ps1'
```

Um auf die Ausgangsvariable (entspricht „Hello“) des folgenden Beispielschritts zu verweisen, lautet das Verkettungsmuster. `{{ build.SamplePowerShellStep.outputs.stdout }}`

```
phases:
  - name: 'build'
    steps:
      - name: SamplePowerShellStep
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          commands:
            - 'Write-Host "Hello"'
```

## Schema und Definitionen des Dokuments
<a name="document-schema"></a>

Das Folgende ist das YAML-Schema für ein Dokument.

```
name: (optional)
description: (optional)
schemaVersion: "string"

phases:
  - name: "string"
    steps:
      - name: "string"
        action: "string"
        timeoutSeconds: integer
        onFailure: "Abort|Continue|Ignore"
        maxAttempts: integer
        inputs:
```

Die Schemadefinitionen für ein Dokument lauten wie folgt.


| Feld | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| Name | Name des Dokuments. | Zeichenfolge | Nein | 
| description | Beschreibung des Dokuments. | Zeichenfolge |  Nein  | 
| schemaVersion | Schemaversion des Dokuments, derzeit 1.0. | Zeichenfolge |  Ja  | 
| phases | Eine Liste der Phasen mit ihren Schritten. |  Auflisten  |  Ja  | 

Die Schemadefinitionen für eine Phase lauten wie folgt.


| Feld | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| Name | Name der Phase. | Zeichenfolge | Ja | 
| steps | Liste der Schritte in der Phase. | Auflisten  |  Ja  | 

Die Schemadefinitionen für einen Schritt lauten wie folgt.


| Feld | Description | Typ | Erforderlich | Standardwert | 
| --- | --- | --- | --- | --- | 
| Name | Benutzerdefinierter Name für den Schritt. | Zeichenfolge |  |  | 
| action | Schlüsselwort, das sich auf das Modul bezieht, das den Schritt ausführt. | Zeichenfolge |  |  | 
| timeoutSeconds |  Anzahl der Sekunden, die der Schritt ausgeführt wird, bevor er fehlschlägt oder es erneut versucht.  Unterstützt auch den Wert -1, was auf ein unendliches Timeout hinweist. 0 und andere negative Werte sind nicht zulässig.  | Ganzzahl |  Nein  | 7.200 Sekunden (120 Minuten) | 
| onFailure |  Gibt an, wie der Schritt im Falle eines Fehlers vorgehen soll. Gültige Werte sind:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-use-documents.html)  |  Zeichenfolge  |  Nein  | Abbrechen | 
| maxAttempts | Höchstzahl zulässiger Versuche, bevor der Schritt fehlschlägt. | Ganzzahl |  Nein  | 1 | 
| inputs | Enthält Parameter, die das Aktionsmodul benötigt, um den Schritt auszuführen. | Diktieren |  Ja  |  | 

## Beispiele für Dokumente
<a name="document-example"></a>

Die folgenden Beispiele zeigen AWSTOE Komponentendokumente, die Aufgaben für das Zielbetriebssystem ausführen.

------
#### [ Linux ]

**Beispiel 1: Führen Sie eine benutzerdefinierte Binärdatei aus**  
Im Folgenden finden Sie ein Beispieldokument, das eine benutzerdefinierte Binärdatei herunterlädt und auf einer Linux-Instanz ausführt.

```
name: LinuxBin
description: Download and run a custom Linux binary file.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://<replaceable>amzn-s3-demo-source-bucket</replaceable>/<replaceable>myapplication</replaceable>
            destination: /tmp/<replaceable>myapplication</replaceable>
      - name: Enable
        action: ExecuteBash
        onFailure: Continue
        inputs:
          commands:
            - 'chmod u+x {{ build.Download.inputs[0].destination }}'
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '--install'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------
#### [ Windows ]

**Beispiel 1: Installieren Sie Windows-Updates**  
Das folgende Beispieldokument installiert alle verfügbaren Windows-Updates, führt ein Konfigurationsskript aus, überprüft die Änderungen, bevor das AMI erstellt wird, und testet die Änderungen, nachdem das AMI erstellt wurde.

```
name: RunConfig_UpdateWindows
description: 'This document will install all available Windows updates and run a config script. It will then validate the changes before an AMI is created. Then after AMI creation, it will test all the changes.'
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: DownloadConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/config.ps1'
            destination: 'C:\config.ps1'

      - name: RunConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{build.DownloadConfigScript.inputs[0].destination}}'

      - name: Cleanup
        action: DeleteFile
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - path: '{{build.DownloadConfigScript.inputs[0].destination}}'

      - name: RebootAfterConfigApplied
        action: Reboot
        inputs:
          delaySeconds: 60

      - name: InstallWindowsUpdates
        action: UpdateOS

  - name: validate
    steps:
      - name: DownloadTestConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/testConfig.ps1'
            destination: 'C:\testConfig.ps1'

      - name: ValidateConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{validate.DownloadTestConfigScript.inputs[0].destination}}'

      - name: Cleanup
        action: DeleteFile
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - path: '{{validate.DownloadTestConfigScript.inputs[0].destination}}'

  - name: test
    steps:
      - name: DownloadTestConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/testConfig.ps1'
            destination: 'C:\testConfig.ps1'

      - name: ValidateConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{test.DownloadTestConfigScript.inputs[0].destination}}'
```

**Beispiel 2: Installieren Sie das AWS CLI auf einer Windows-Instanz**  
Im Folgenden finden Sie ein Beispieldokument, das mithilfe der Setup-Datei AWS CLI auf einer Windows-Instanz installiert wird.

```
name: InstallCLISetUp
description: Install &CLI; using the setup file
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://aws-cli/AWSCLISetup.exe
            destination: C:\Windows\temp\AWSCLISetup.exe
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '/install'
            - '/quiet'
            - '/norestart'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

**Beispiel 3: Installieren Sie das AWS CLI mit dem MSI-Installationsprogramm**  
Im Folgenden finden Sie ein Beispieldokument, das AWS CLI mit dem MSI-Installationsprogramm installiert wird.

```
name: InstallCLIMSI
description: Install &CLI; using the MSI installer
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://aws-cli/AWSCLI64PY3.msi
            destination: C:\Windows\temp\AWSCLI64PY3.msi
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: 'C:\Windows\System32\msiexec.exe'
          arguments:
            - '/i'
            - '{{ build.Download.inputs[0].destination }}'
            - '/quiet'
            - '/norestart'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------
#### [ macOS ]

**Beispiel 1: Eine benutzerdefinierte macOS-Binärdatei ausführen**  
Im Folgenden finden Sie ein Beispieldokument, das eine benutzerdefinierte Binärdatei herunterlädt und auf einer macOS-Instanz ausführt.

```
name: macOSBin
description: Download and run a binary file on macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://<replaceable>amzn-s3-demo-source-bucket</replaceable>/<replaceable>myapplication</replaceable>
            destination: /tmp/<replaceable>myapplication</replaceable>
      - name: Enable
        action: ExecuteBash
        onFailure: Continue
        inputs:
          commands:
            - 'chmod u+x {{ build.Download.inputs[0].destination }}'
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '--install'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------

# Verwenden Sie Variablen in Ihrem Dokument mit benutzerdefinierten Komponenten
<a name="toe-user-defined-variables"></a>

Variablen bieten eine Möglichkeit, Daten mit aussagekräftigen Namen zu versehen, die in der gesamten Anwendung verwendet werden können. Sie können benutzerdefinierte Variablen mit einfachen und lesbaren Formaten für komplexe Workflows definieren und sie im YAML-Anwendungskomponentendokument für eine AWSTOE Komponente referenzieren.

Dieser Abschnitt enthält Informationen, die Ihnen helfen, Variablen für Ihre AWSTOE Komponente im Dokument für die YAML-Anwendungskomponente zu definieren, einschließlich Syntax, Namenseinschränkungen und Beispielen.

## Konstanten
<a name="user-defined-vars-constants"></a>

Konstanten sind unveränderliche Variablen, die nach ihrer Definition nicht geändert oder überschrieben werden können. Konstanten können mithilfe von Werten im Abschnitt eines Dokuments definiert werden. `constants` AWSTOE 

**Regeln für Konstantennamen**
+ Der Name muss zwischen 3 und 128 Zeichen lang sein.
+ Der Name darf nur alphanumerische Zeichen (a-z, A-Z, 0-9), Bindestriche (-) oder Unterstriche (\$1) enthalten.
+ Der Name muss innerhalb des Dokuments eindeutig sein.
+ Der Name muss als YAML-Zeichenfolge angegeben werden.

**Syntax**

```
constants:
  - <name>:
      type: <constant type>
      value: <constant value>
```


| Tastenname | Erforderlich | Beschreibung | 
| --- | --- | --- | 
|  `name`  |  Ja  | Name der Konstante. Muss für das Dokument eindeutig sein (er darf nicht mit anderen Parameternamen oder Konstanten identisch sein). | 
| `value` | Ja | Wert der Konstante. | 
| `type` | Ja | Typ der Konstante. Der unterstützte Typ iststring. | 

**Verweisen Sie auf konstante Werte in einem Dokument**  
Sie können in Step- oder Loop-Eingaben in Ihrem YAML-Dokument wie folgt auf Konstanten verweisen:
+ Bei konstanten Verweisen wird zwischen Groß- und Kleinschreibung unterschieden, und der Name muss exakt übereinstimmen.
+ Der Name muss in doppelte geschweifte Klammern eingeschlossen werden. `{{` *MyConstant* `}}`
+ Leerzeichen sind in geschweiften Klammern zulässig und werden automatisch gekürzt. Beispielsweise sind alle der folgenden Verweise gültig:

  `{{ MyConstant }}`, `{{ MyConstant}}`, `{{MyConstant }}`, `{{MyConstant}}`
+ Der Verweis im YAML-Dokument muss als Zeichenfolge (in einfache oder doppelte Anführungszeichen eingeschlossen) angegeben werden.

  Zum Beispiel: `- {{ MyConstant }}` ist nicht gültig, da es nicht als Zeichenfolge identifiziert wird.

  Die folgenden Verweise sind jedoch beide gültig: `- '{{ MyConstant }}'` und`- "{{ MyConstant }}"`.

**Beispiele**  
In Schritteingaben referenzierte Konstante

```
name: Download AWS CLI version 2
schemaVersion: 1.0
constants:
  - Source:
      type: string
      value: https://awscli.amazonaws.com/AWSCLIV2.msi
phases:
  - name: build
    steps:
      - name: Download
        action: WebDownload
        inputs:
          - source: '{{ Source }}'
            destination: 'C:\Windows\Temp\AWSCLIV2.msi'
```

In Loop-Eingängen wird auf eine Konstante verwiesen

```
name: PingHosts
schemaVersion: 1.0
constants:
  - Hosts:
      type: string
      value: 127.0.0.1,amazon.com
phases:
  - name: build
    steps:
      - name: Ping
        action: ExecuteBash
        loop:
          forEach:
            list: '{{ Hosts }}'
            delimiter: ','
        inputs:
          commands:
            - ping -c 4 {{ loop.value }}
```

## Parameters
<a name="user-defined-vars-parameters"></a>

Parameter sind veränderbare Variablen mit Einstellungen, die die aufrufende Anwendung zur Laufzeit bereitstellen kann. Sie können Parameter im `Parameters` Abschnitt des YAML-Dokuments definieren.

**Regeln für Parameternamen**
+ Der Name muss zwischen 3 und 128 Zeichen lang sein.
+ Der Name darf nur alphanumerische Zeichen (a-z, A-Z, 0-9), Bindestriche (-) oder Unterstriche (\$1) enthalten.
+ Der Name muss innerhalb des Dokuments eindeutig sein.
+ Der Name muss als YAML-Zeichenfolge angegeben werden.

### Syntax
<a name="vars-parameters-syntax"></a>

```
parameters:
  - <name>:
      type: <parameter type>
      default: <parameter value>
      description: <parameter description>
```


| Tastenname | Erforderlich | Beschreibung | 
| --- | --- | --- | 
| `name` | Ja | Der Name des Parameters. Muss für das Dokument eindeutig sein (er darf nicht mit anderen Parameternamen oder Konstanten identisch sein). | 
| `type` | Ja | Der Datentyp des Parameters. Zu den unterstützten Typen gehören:`string`. | 
| `default` | Nein | Der Standardwert für den Parameter. | 
| `description` | Nein | Beschreibt den Parameter. | 

### Referenzparameterwerte in einem Dokument
<a name="vars-parameters-referencing"></a>

Sie können Parameter in Step- oder Loop-Eingaben innerhalb Ihres YAML-Dokuments wie folgt referenzieren:
+ Bei Parameterreferenzen wird zwischen Groß- und Kleinschreibung unterschieden, und der Name muss exakt übereinstimmen.
+ Der Name muss in doppelte geschweifte Klammern eingeschlossen werden. `{{` *MyParameter* `}}`
+ Leerzeichen sind in geschweiften Klammern zulässig und werden automatisch gekürzt. Beispielsweise sind alle der folgenden Verweise gültig:

  `{{ MyParameter }}`, `{{ MyParameter}}`, `{{MyParameter }}`, `{{MyParameter}}`
+ Der Verweis im YAML-Dokument muss als Zeichenfolge (in einfache oder doppelte Anführungszeichen eingeschlossen) angegeben werden.

  Zum Beispiel: `- {{ MyParameter }}` ist nicht gültig, da es nicht als Zeichenfolge identifiziert wird.

  Die folgenden Verweise sind jedoch beide gültig: `- '{{ MyParameter }}'` und`- "{{ MyParameter }}"`.

**Beispiele**  
Die folgenden Beispiele zeigen, wie Sie Parameter in Ihrem YAML-Dokument verwenden können:
+ Beziehen Sie sich auf einen Parameter in den Schritteingaben:

  ```
  name: Download AWS CLI version 2
  schemaVersion: 1.0
  parameters:
    - Source:
        type: string
        default: 'https://awscli.amazonaws.com/AWSCLIV2.msi'
        description: The AWS CLI installer source URL.
  phases:
    - name: build
      steps:
        - name: Download
          action: WebDownload
          inputs:
            - source: '{{ Source }}'
              destination: 'C:\Windows\Temp\AWSCLIV2.msi'
  ```
+ Beziehen Sie sich auf einen Parameter in Loop-Eingängen:

  ```
  name: PingHosts
  schemaVersion: 1.0
  parameters:
    - Hosts:
        type: string
        default: 127.0.0.1,amazon.com
        description: A comma separated list of hosts to ping.
  phases:
    - name: build
      steps:
        - name: Ping
          action: ExecuteBash
          loop:
            forEach:
              list: '{{ Hosts }}'
              delimiter: ','
          inputs:
            commands:
              - ping -c 4 {{ loop.value }}
  ```

### Parameter zur Laufzeit überschreiben
<a name="vars-parameters-set-at-runtime"></a>

Sie können die `--parameters` Option AWS CLI mit einem Schlüssel-Wert-Paar verwenden, um zur Laufzeit einen Parameterwert festzulegen.
+ <name><value>Geben Sie das Schlüssel-Wert-Paar für den Parameter als Namen und Wert an, getrennt durch ein Gleichheitszeichen (=).
+ Mehrere Parameter müssen durch ein Komma getrennt werden.
+ Parameternamen, die im YAML-Komponentendokument nicht gefunden werden, werden ignoriert.
+ Der Parametername und der Wert sind beide erforderlich.

**Wichtig**  
Bei den Komponentenparametern handelt es sich um reine Textwerte, die angemeldet sind AWS CloudTrail. Wir empfehlen, dass Sie AWS Secrets Manager oder den AWS Systems Manager Parameter Store verwenden, um Ihre Geheimnisse zu speichern. Weitere Informationen zu Secrets Manager finden Sie unter [Was ist Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) im *AWS Secrets Manager Benutzerhandbuch*. Weitere Informationen zum AWS Systems Manager Parameterspeicher finden Sie unter [AWS Systems Manager Parameterspeicher](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) im *AWS Systems Manager Benutzerhandbuch*.

#### Syntax
<a name="vars-runtime-parameters-syntax"></a>

```
--parameters name1=value1,name2=value2...
```


| CLI-Option | Erforderlich | Description | 
| --- | --- | --- | 
| --parameter *name* =*value*,... | Nein | Diese Option verwendet eine Liste von Schlüssel-Wert-Paaren mit dem Parameternamen als Schlüssel. | 

**Beispiele**  
Die folgenden Beispiele zeigen, wie Sie Parameter in Ihrem YAML-Dokument verwenden können:
+ Das in dieser `--parameter` Option angegebene Parameter-Schlüssel-Wert-Paar ist nicht gültig:

  ```
  --parameters ntp-server=
  ```
+ Legen Sie ein Parameter-Schlüssel-Wert-Paar mit der `--parameter` folgenden Option fest: AWS CLI

  ```
  --parameters ntp-server=ntp-server-windows-qe.us-east1.amazon.com
  ```
+ Legen Sie mehrere Parameter-Schlüssel-Wert-Paare mit der Option im `--parameter` Feld fest: AWS CLI

  ```
  --parameters ntp-server=ntp-server.amazon.com,http-url=https://internal-us-east1.amazon.com
  ```

## Verwenden Sie die Parameter Store-Parameter von Systems Manager
<a name="toe-ssm-parameters"></a>

Sie können AWS Systems Manager Parameter Store-Parameter (SSM-Parameter) in Ihren Komponentendokumenten referenzieren, indem Sie Variablen das Präfix voranstellen. `aws:ssm` Zum Beispiel 

`{{ aws:ssm:/my/param }}`wird in den Wert des SSM-Parameters aufgelöst. `/my/param`

Diese Funktion unterstützt die folgenden SSM-Parametertypen:
+ Zeichenfolge — Ordnet dem AWSTOE String-Typ zu.
+ StringList — Ordnet dem AWSTOE `stringList` Typ zu.
+ SecureString — Ordnet dem AWSTOE String-Typ zu.

Weitere Informationen zum Parameterspeicher finden Sie unter [AWS Systems Manager Parameterspeicher](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) im *AWS Systems Manager Benutzerhandbuch*.

Sie können auch mithilfe eines SSM-Parameters `SecureString` auf AWS Secrets Manager Geheimnisse verweisen. Beispiel: `{{ aws:ssm:/aws/reference/secretsmanager/test/test-secret }}`. Weitere Informationen finden Sie unter [Referenzieren von AWS Secrets Manager Geheimnissen aus Parameterspeicher-Parametern](https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-ps-secretsmanager.html).

**Wichtig**  
Image Builder schließt die `SecureString` Parameterauflösung aus seinen Protokollen aus. Sie sind jedoch auch dafür verantwortlich, sicherzustellen, dass vertrauliche Informationen nicht über Befehle protokolliert werden, die im Komponentendokument ausgegeben werden. Wenn Sie den `echo` Befehl beispielsweise mit einer sicheren Zeichenfolge verwenden, schreibt der Befehl einen Klartextwert in das Protokoll.

### Erforderliche IAM-Berechtigungen
<a name="toe-ssm-parameters-permissions"></a>

Um Systems Manager Manager-Parameter in Ihren Komponenten verwenden zu können, muss Ihre Instanzrolle über die `ssm:GetParameter` Berechtigung für die Parameterressource ARN verfügen. Beispiel:

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
		}
	]
}
```

------

Für den Zugriff auf verschlüsselte Werte benötigen Sie außerdem die folgenden Berechtigungen:
+ Fügen Sie `kms:Decrypt` `SecureString` Parameter oder AWS Secrets Manager Werte hinzu, die verschlüsselt sind und von einem Kunden verwaltet werden AWS KMS key.
+ Fügen Sie hinzu`secretsmanager:GetSecretValue`, wenn Sie auf ein Secrets Manager Manager-Geheimnis verweisen.

### Verweisen Sie in einem Komponentendokument auf einen SSM-Parameter
<a name="toe-ssm-parameters-example"></a>

Das folgende Beispiel zeigt, wie auf einen Systems Manager Parameter Store-Parameter von Systems Manager Manager-Parametern in einer Komponente verwiesen wird:

```
name: UseSSMParameterVariable
description: This is a sample component document that prints out the value of an SSM Parameter. Never do this for a SecureString parameter.
schemaVersion: 1.0

phases:
  - name: verify
    steps:
      - name: EchoParameterValue
        action: ExecuteBash
        inputs:
          commands:
            - echo "Log SSM parameter name: /my/test/param, value {{ aws:ssm:/my/test/param }}."
```

### Dynamische Auflösung von Laufzeitvariablen für SSM-Parameter
<a name="toe-dynamic-vars"></a>

AWSTOE stellt die folgende integrierte Funktion bereit, die Sie innerhalb von Variablenreferenzen verwenden können, um Werte zur Laufzeit zu manipulieren oder zu transformieren.

#### Funktion auflösen
<a name="toe-function-resolve"></a>

Die `resolve` Funktion löst eine Variablenreferenz innerhalb einer anderen Variablenreferenz auf und ermöglicht so eine dynamische Referenzierung von Variablennamen. Dies ist nützlich, wenn Sie mit SSM-Parametern arbeiten, bei denen ein Teil des Parameterpfads variabel sein und als Dokumentparameter übergeben werden kann.

Die `resolve` Funktion unterstützt nur die dynamische Auflösung des Namensteils eines SSM-Parameters.

##### Syntax
<a name="toe-function-resolve-syntax"></a>

Das `dynamic_variable` folgende Beispiel stellt den Namen eines SSM-Parameters dar und muss einer der folgenden sein:
+ Eine SSM-Parameterreferenz (zum Beispiel) `aws:ssm:/my/param`
+ Eine Parameterreferenz für ein Komponentendokument (z. B.`parameter-name`)

```
{{ aws:ssm:resolve(dynamic_variable) }}
```

##### Beispiel: Einen SSM-Parameter zur Laufzeit auflösen
<a name="toe-function-resolve-examples"></a>

Das folgende Beispiel zeigt, wie die `resolve` Funktion in einem YAML-Komponentendokument verwendet wird:

```
name: SsmParameterTest
description: This component verifies an SSM parameter variable reference with the echo command.
schemaVersion: 1.0

parameters:
  - parameter-name:
      type: string
      description: "test"

phases:
  - name: validate
    steps:
      - name: PrintDynamicVariable
        action: ExecuteBash
        inputs:
          commands:
            - echo "{{ aws:ssm:resolve(parameter-name) }}"
```

# Verwenden Sie bedingte Konstrukte in AWSTOE
<a name="toe-conditional-constructs"></a>

Bedingte Konstrukte führen unterschiedliche Aktionen in Ihrem Komponentendokument aus, je nachdem, ob der angegebene bedingte Ausdruck als oder ausgewertet wird. `true` `false` Sie können das `if` Konstrukt verwenden, um den Ausführungsablauf in Ihrem Komponentendokument zu steuern.

## wenn Konstrukt
<a name="toe-conditional-if"></a>

Sie können das `if` Konstrukt verwenden, um zu bewerten, ob ein Schritt ausgeführt werden soll oder nicht. Standardmäßig wird der Schritt AWSTOE ausgeführt, wenn der `if` bedingte Ausdruck zu ausgewertet wird`true`, und wenn die Bedingung zu ausgewertet wird`false`, wird der Schritt AWSTOE übersprungen. Wenn ein Schritt übersprungen wird, wird er bei der AWSTOE Bewertung, ob die Phase und das Dokument erfolgreich ausgeführt wurden, als erfolgreicher Schritt behandelt.

**Anmerkung**  
Eine `if` Anweisung wird nur einmal ausgewertet, auch wenn der Schritt einen Neustart auslöst. Wenn ein Schritt neu gestartet wird, erkennt er, dass die `if` Anweisung bereits ausgewertet wurde, und setzt dort fort, wo sie aufgehört hat.

### Syntax
<a name="toe-conditional-if-syntax"></a>

```
if:
  - <conditional expression>:
      [then: <step action>]
      [else: <step action>]
```


| Tastenname | Erforderlich | Description | 
| --- | --- | --- | 
| bedingter Ausdruck | Ja |  Der bedingte Ausdruck kann genau einen der folgenden Typen von Operatoren auf oberster Ebene enthalten. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-conditional-constructs.html) Wenn Ihr Ausdruck mehrere Bedingungen erfüllen muss, verwenden Sie einen logischen Operator, um Ihre Bedingungen anzugeben.  | 
| then | Nein |  Definiert die Aktion, die ausgeführt werden soll, wenn der bedingte Ausdruck zu `true` ausgewertet wird.  | 
| else | Nein |  Definiert die Aktion, die ausgeführt werden soll, wenn der bedingte Ausdruck als Ergebnis ausgewertet wird. `false`  | 
| Schritt, Aktion | Bedingt |  Wenn Sie `then` oder verwenden`else`, müssen Sie eine der folgenden Schrittaktionen angeben: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-conditional-constructs.html)  | 

**Beispiel 1: Paket installieren**  
In den folgenden Beispielschritten aus einem AWSTOE Komponentendokument werden logische Operatoren verwendet, um einen Parameterwert zu testen und die entsprechenden Paketmanager-Befehle auszuführen, um eine Anwendung zu installieren, falls das Paket entpackt ist.

```
    - name: InstallUnzipAptGet
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'apt-get'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo apt-get update
            - sudo apt-get install -y unzip

    - name: InstallUnzipYum
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'yum'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo yum install -y unzip

    - name: InstallUnzipZypper
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'zypper'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo zypper refresh
            - sudo zypper install -y unzip
```

**Beispiel 2: Einen Schritt überspringen**  
Das folgende Beispiel zeigt zwei Möglichkeiten, einen Schritt zu überspringen. Einer verwendet einen logischen Operator, und einer verwendet einen Vergleichsoperator mit der `Skip` Schrittaktion.

```
# Creates a file if it does not exist using not
- name: CreateMyConfigFile-1
  action: ExecuteBash
  if:
    not:
      fileExists: '/etc/my_config'
  inputs:
    commands:
      - echo "Hello world" > '/etc/my_config'

# Creates a file if it does not exist using then and else
- name: CreateMyConfigFile-2
  action: ExecuteBash
  if:
    fileExists: '/etc/my_config'
    then: Skip
    else: Execute
  inputs:
    commands:
      - echo "Hello world" > '/etc/my_config'
```

# Verwenden Sie Vergleichsoperatoren in AWSTOE Komponentendokumenten
<a name="toe-comparison-operators"></a>

Sie können die folgenden Vergleichsoperatoren mit dem **[Bestätigen](toe-action-modules.md#action-modules-assertion)** Aktionsmodul und mit bedingten Ausdrücken verwenden, die den verwenden[wenn KonstruktSyntax](toe-conditional-constructs.md#toe-conditional-if). Ein Vergleichsoperator kann beispielsweise `stringIsEmpty` mit einem einzelnen Wert arbeiten oder einen Basiswert mit einem zweiten Wert (Variablenwert) vergleichen, um festzustellen, ob der bedingte Ausdruck als `true` oder `false` ausgewertet wird.

Wenn der Vergleich auf zwei Werten basiert, kann der zweite Wert eine verkettete Variable sein.

Beim Vergleich von Werten eines anderen Typs können vor dem Vergleich die folgenden Wertekonvertierungen erfolgen:
+ Wenn der Variablenwert bei numerischen Vergleichen eine Zeichenfolge ist, wird die Zeichenfolge vor der Auswertung in eine Zahl AWSTOE umgewandelt. Wenn die Konvertierung nicht möglich ist, kehrt der Vergleich zurück`false`. Wenn der Variablenwert beispielsweise ist`"1.0"`, funktioniert die Konvertierung, aber wenn der Variablenwert ist, schlägt `"a10"` die Konvertierung fehl.
+ Wenn der Variablenwert bei Zeichenkettenvergleichen eine Zahl ist, wird er vor der Auswertung in eine Zeichenfolge AWSTOE umgewandelt.

## Vergleiche Zeichenketten
<a name="toe-compare-strings"></a>

Die folgenden Vergleichsoperatoren verwenden Zeichenketten, um Werte zu vergleichen, auf Leerzeichen oder eine leere Zeichenfolge zu testen oder einen Eingabewert mit einem Regex-Muster zu vergleichen. Bei Zeichenfolgenvergleichen wird nicht zwischen Groß- und Kleinschreibung unterschieden und Leerzeichen am Anfang oder Ende der Zeichenketteneingaben werden nicht gekürzt.

**Operatoren zum Vergleich von Zeichenketten**
+ [stringIsEmpty](#stringIsEmpty)
+ [stringIsWhitespace](#stringIsWhitespace)
+ [stringEquals](#stringEquals)
+ [stringLessThan](#stringLessThan)
+ [stringLessThanEquals](#stringLessThanEquals)
+ [stringGreaterThan](#stringGreaterThan)
+ [stringGreaterThanEquals](#stringGreaterThanEquals)
+ [patternMatches](#patternMatches)

**stringIsEmpty**  
Der `stringIsEmpty` Operator kehrt zurück, `true` wenn die angegebene Zeichenfolge keine Zeichen enthält. Beispiel:  

```
# Evaluates to true
stringIsEmpty: ""

# Evaluates to false
stringIsEmpty: " "
				
# Evaluates to false
stringIsEmpty: "Hello."
```

**stringIsWhitespace**  
Testet, ob die für angegebene Zeichenfolge nur Leerzeichen `stringIsWhitespace` enthält. Beispiel:  

```
# Evaluates to true
stringIsWhitespace: "   "

# Evaluates to false
stringIsWhitespace: ""
				
# Evaluates to false
stringIsWhitespace: " Hello?"
```

**Zeichenfolge ist gleich**  
Testet, ob die für `stringEquals` angegebene Zeichenfolge exakt mit der im Parameter angegebenen Zeichenfolge übereinstimmt. `value` Beispiel:  

```
# Evaluates to true
stringEquals: 'Testing, testing...'
value: 'Testing, testing...'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'Hello again.'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'TESTING, TESTING....'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: '   Testing, testing...'
				
# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'Testing, testing...   '
```

**stringLessThan**  
Testet, ob die für angegebene Zeichenfolge kleiner als die im `value` Parameter angegebene Zeichenfolge `stringLessThan` ist. Beispiel:  

```
# Evaluates to true
# This comparison operator isn't case sensitive
stringlessThan: 'A'
value: 'a'

# Evaluates to true - 'a' is less than 'b'
stringlessThan: 'b'
value: 'a'

# Evaluates to true
# Numeric strings compare as less than alphabetic strings
stringlessThan: 'a'
value: '0'

# Evaluates to false
stringlessThan: '0'
value: 'a'
```

**stringLessThanEntspricht**  
Testet, ob die für angegebene Zeichenfolge kleiner oder gleich der im `value` Parameter angegebenen Zeichenfolge `stringLessThanEquals` ist. Beispiel:  

```
# Evaluates to true - 'a' is equal to 'a'
stringLessThanEquals: 'a'
value: 'a'

# Evaluates to true - since the comparison isn't case sensitive, 'a' is equal to 'A'
stringLessThanEquals: 'A'
value: 'a'

# Evaluates to true - 'a' is less than 'b'
stringLessThanEquals: 'b'
value: 'a'

# Evaluates to true - '0' is less than 'a'
stringLessThanEquals: 'a'
value: '0'

# Evaluates to false - 'a' is greater than '0'
stringLessThanEquals: '0'
value: 'a'
```

**stringGreaterThan**  
Testet, ob die für angegebene Zeichenfolge größer als die im `value` Parameter angegebene Zeichenfolge `stringGreaterThan` ist. Beispiel:  

```
# Evaluates to false - since the comparison isn't case sensitive, 'A' is equal to 'a'
stringGreaterThan: 'a'
value: 'A'

# Evaluates to true - 'b' is greater than 'a'
stringGreaterThan: 'a'
value: 'b'

# Evaluates to true - 'a' is greater than '0'
stringGreaterThan: '0'
value: 'a'

# Evaluates to false - '0' is less than 'a'
stringGreaterThan: 'a'
value: '0'
```

**stringGreaterThanEntspricht**  
Testet, ob die für angegebene Zeichenfolge größer oder gleich der im `value` Parameter angegebenen Zeichenfolge `stringGreaterThanEquals` ist. Beispiel:  

```
# Evaluates to true - 'a' is equal to 'A'
stringGreaterThanEquals: 'A'
value: 'a'

# Evaluates to true - 'b' is greater than 'a'
stringGreaterThanEquals: 'a'
value: 'b'

# Evaluates to true - 'a' is greater than '0'
stringGreaterThanEquals: '0'
value: 'a'

# Evaluates to false - '0' is less than 'a'
stringGreaterThanEquals: 'a'
value: '0'
```

**PatternMatches**  
Testet, ob die im `value` Parameter angegebene Zeichenfolge mit dem für angegebenen Regex-Muster übereinstimmt. `patternMatches` Der Vergleich verwendet das [Golang-Regexp-Paket, das](https://pkg.go.dev/regexp) der Syntax entspricht. RE2 Weitere Informationen zu RE2 Regeln finden Sie im [google/re2-Repository](https://github.com/google/re2/wiki/Syntax) unter. *GitHub*  
Das folgende Beispiel zeigt eine Musterübereinstimmung, die Folgendes zurückgibt`true`:  

```
patternMatches: '^[a-z]+$'
value: 'ThisIsValue'
```

## Zahlen vergleichen
<a name="toe-compare-numbers"></a>

Die folgenden Vergleichsoperatoren arbeiten mit Zahlen. Bei den für diese Operatoren bereitgestellten Werte muss es sich gemäß der YAML-Spezifikation um einen der folgenden Typen handeln. Die Support für numerische Vergleiche verwendet den Golang Big Package Comparison Operator, zum Beispiel: [func (\$1Float](https://pkg.go.dev/math/big#Float.Cmp)) Cmp.
+ Ganzzahl
+ Float (basiert auf float64, das Zahlen von -1.7e\$1308 bis \$11.7e\$1308 unterstützt)
+ Eine Zeichenfolge, die dem folgenden Regex-Muster entspricht: `^[-+]?([0-9]+[.])?[0-9]+$`

**Operatoren für den Zahlenvergleich**
+ [numberEquals](#numberEquals)
+ [numberLessThan](#numberLessThan)
+ [numberLessThanEquals](#numberLessThanEquals)
+ [numberGreaterThan](#numberGreaterThan)
+ [numberGreaterThanEquals](#numberGreaterThanEquals)

**Zahl ist gleich**  
Testet, ob die für `numberEquals` angegebene Zahl der im Parameter angegebenen Zahl entspricht. `value` Alle folgenden Beispielvergleiche geben Folgendes zurück`true`:  

```
# Values provided as a positive number
numberEquals: 1
value: 1

# Comparison value provided as a string
numberEquals: '1'
value: 1

# Value provided as a string
numberEquals: 1
value: '1'

# Values provided as floats
numberEquals: 5.0
value: 5.0

# Values provided as a negative number
numberEquals: -1
value: -1
```

**numberLessThan**  
Testet, ob die für angegebene Zahl kleiner als die im `value` Parameter angegebene Zahl `numberLessThan` ist. Beispiel:  

```
# Evaluates to true
numberLessThan: 2
value: 1

# Evaluates to true
numberLessThan: 2
value: 1.9

# Evaluates to false
numberLessThan: 2
value: '2'
```

**numberLessThanEntspricht**  
Testet, ob die für angegebene Zahl kleiner oder gleich der im `value` Parameter angegebenen Zahl `numberLessThanEquals` ist. Beispiel:  

```
# Evaluates to true
numberLessThanEquals: 2
value: 1

# Evaluates to true
numberLessThanEquals: 2
value: 1.9

# Evaluates to true
numberLessThanEquals: 2
value: '2'

# Evaluates to false
numberLessThanEquals: 2
value: 2.1
```

**numberGreaterThan**  
Testet, ob die für angegebene Zahl größer als die im `value` Parameter angegebene Zahl `numberGreaterThan` ist. Beispiel:  

```
# Evaluates to true
numberGreaterThan: 1
value: 2

# Evaluates to true
numberGreaterThan: 1
value: 1.1

# Evaluates to false
numberGreaterThan: 1
value: '1'
```

**numberGreaterThanEntspricht**  
Testet, ob die für angegebene Zahl größer oder gleich der im `value` Parameter angegebenen Zahl `numberGreaterThanEquals` ist. Beispiel:  

```
# Evaluates to true
numberGreaterThanEquals: 1
value: 2

# Evaluates to true
numberGreaterThanEquals: 1
value: 1.1

# Evaluates to true
numberGreaterThanEquals: 1
value: '1'

# Evaluates to false
numberGreaterThanEquals: 1
value: 0.8
```

## Überprüfen Sie die Dateien
<a name="toe-check-files"></a>

Die folgenden Vergleichsoperatoren überprüfen den Datei-Hash oder prüfen, ob eine Datei oder ein Ordner existiert.

**Datei- und Ordneroperatoren**
+ [binaryExists](#binaryExists)
+ [fileExists](#fileExists)
+ [folderExists](#folderExists)
+ [fileMD5Equals](#fileMD5Equals)
+ [fileSHA1Equals](#fileSHA1Equals)
+ [fileSHA256Equals](#fileSHA256Equals)
+ [fileSHA512Equals](#fileSHA512Equals)

**Binärdatei existiert**  
Testet, ob eine Anwendung im aktuellen Pfad verfügbar ist. Beispiel:  

```
binaryExists: 'foo'
```
Auf Linux- und macOS-Systemen funktioniert dies für eine Anwendung mit dem Namen *foo* genauso wie der folgende Bash-Befehl:**type *foo* >/dev/null 2>&1**, wobei **\$1? == 0** auf einen erfolgreichen Vergleich hinweist.  
Auf Windows-Systemen funktioniert dies für eine Anwendung mit dem Namen genauso wie der PowerShell Befehl *foo***& C:\$1Windows\$1System32\$1where.exe /Q *foo***, der **\$1LASTEXITCODE = 0** auf einen erfolgreichen Vergleich hinweist.

**Die Datei ist vorhanden**  
Testet, ob eine Datei im angegebenen Pfad existiert. Sie können einen absoluten oder relativen Pfad angeben. Wenn der von Ihnen angegebene Speicherort existiert und es sich um `true` eine Datei handelt, ergibt der Vergleich Folgendes: Beispiel:  

```
fileExists: '/path/to/file'
```
Auf Linux- und macOS-Systemen funktioniert dies genauso wie der folgende Bash-Befehl:**-d */path/to/file***, wobei **\$1? == 0** auf einen erfolgreichen Vergleich hinweist.  
Auf Windows-Systemen funktioniert das genauso wie der PowerShell Befehl**Test-Path -Path '*C:\$1path\$1to\$1file*' -PathType 'Leaf'**.

**Ordner ist vorhanden**  
Testet, ob ein Ordner im angegebenen Pfad existiert. Sie können einen absoluten oder relativen Pfad angeben. Wenn der von Ihnen angegebene Speicherort vorhanden ist und es sich um `true` einen Ordner handelt, ergibt der Vergleich Folgendes: Beispiel:  

```
folderExists: '/path/to/folder'
```
Auf Linux- und macOS-Systemen funktioniert dies genauso wie der folgende Bash-Befehl:**-d */path/to/folder***, wobei **\$1? == 0** auf einen erfolgreichen Vergleich hinweist.  
Auf Windows-Systemen funktioniert das genauso wie der PowerShell Befehl**Test-Path -Path '*C:\$1path\$1to\$1folder*' -PathType 'Container'**.

**Datei MD5 ist gleich**  
Testet, ob der MD5 Hash einer Datei einem bestimmten Wert entspricht. Beispiel:  

```
fileMD5Equals: '<MD5Hash>'
path: '/path/to/file'
```

**Datei SHA1 ist gleich**  
Testet, ob der SHA1 Hash einer Datei einem bestimmten Wert entspricht. Beispiel:  

```
fileSHA1Equals: '<SHA1Hash>'
path: '/path/to/file'
```

**Datei SHA256 ist gleich**  
Testet, ob der SHA256 Hash einer Datei einem bestimmten Wert entspricht. Beispiel:  

```
fileSHA256Equals: '<SHA256Hash>'
path: '/path/to/file'
```

**Datei SHA512 ist gleich**  
Testet, ob der SHA512 Hash einer Datei einem bestimmten Wert entspricht. Beispiel:  

```
fileSHA512Equals: '<SHA512Hash>'
path: '/path/to/file'
```

# Verwenden Sie logische Operatoren in AWSTOE Komponentendokumenten
<a name="toe-logical-operators"></a>

Sie können die folgenden logischen Operatoren verwenden, um bedingte Ausdrücke in Ihrem Komponentendokument hinzuzufügen oder zu ändern. AWSTOE wertet bedingte Ausdrücke in der Reihenfolge aus, in der die Bedingungen angegeben sind. Weitere Hinweise zu Vergleichsoperatoren für Komponentendokumente finden Sie unter[Verwenden Sie Vergleichsoperatoren in AWSTOE Komponentendokumenten](toe-comparison-operators.md).

**und**  
Mit dem `and` Operator können Sie zwei oder mehr Vergleiche als einen einzigen Ausdruck auswerten. Der Ausdruck wird ausgewertet, `true` wenn alle Bedingungen in der Liste erfüllt sind. Andernfalls wird der Ausdruck zu ausgewertet. `false`  
**Beispiele:**  
Im folgenden Beispiel werden zwei Vergleiche durchgeführt — eine Zeichenfolge und eine Zahl. Beide Vergleiche sind wahr, sodass der Ausdruck als wahr ausgewertet wird.

```
and:
  - stringEquals: 'test_string'
    value: 'test_string'
  - numberEquals: 1
    value: 1
```
Im folgenden Beispiel werden auch zwei Vergleiche durchgeführt. Der erste Vergleich ist falsch. An diesem Punkt stoppt die Auswertung und der zweite Vergleich wird übersprungen. Der Ausdruck wird zu ausgewertet. `false`  

```
and:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 1
```

**oder**  
Mit dem `or` Operator können Sie zwei oder mehr Vergleiche als einen einzigen Ausdruck auswerten. Der Ausdruck wird ausgewertet, `true` wenn einer der angegebenen Vergleiche wahr ist. Wenn keiner der angegebenen Vergleiche als Ergebnis ausgewertet wird`true`, wird der Ausdruck als ausgewertet. `false`  
**Beispiele:**  
Im folgenden Beispiel werden zwei Vergleiche durchgeführt — eine Zeichenfolge und eine Zahl. Der erste Vergleich ist wahr, daher wird der Ausdruck zu ausgewertet `true` und der zweite Vergleich wird übersprungen.

```
or:
  - stringEquals: 'test_string'
    value: 'test_string'
  - numberEquals: 1
    value: 3
```
Im folgenden Beispiel werden auch zwei Vergleiche durchgeführt. Der erste Vergleich ist falsch, und die Auswertung wird fortgesetzt. Der zweite Vergleich ist wahr, daher wird der Ausdruck zu `true` ausgewertet.  

```
or:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 1
```
Im letzten Beispiel sind beide Vergleiche falsch, sodass der Ausdruck zu ausgewertet wird. `false`  

```
or:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 3
```

**nicht**  
Mit dem `not` Operator können Sie einen einzelnen Vergleich negieren. Der Ausdruck ergibt, `true` ob der Vergleich falsch ist. Wenn der Vergleich wahr ist, wird der Ausdruck zu ausgewertet. `false`  
**Beispiele:**  
Im folgenden Beispiel wird ein Zeichenkettenvergleich durchgeführt. Der Vergleich ist falsch, daher wird der Ausdruck zu `true` ausgewertet.

```
not:
  - stringEquals: 'test_string'
    value: 'Hello world!'
```
Im folgenden Beispiel wird auch ein Zeichenfolgenvergleich durchgeführt. Der Vergleich ist wahr, daher wird der Ausdruck zu `false` ausgewertet.  

```
not:
  - stringEquals: 'test_string'
    value: 'test_string'
```

# Verwenden Sie Looping-Konstrukte in AWSTOE
<a name="toe-looping-constructs"></a>

Dieser Abschnitt enthält Informationen, die Ihnen beim Erstellen von Schleifenkonstrukten in der helfen sollen. AWSTOE Schleifenkonstrukte definieren eine sich wiederholende Abfolge von Befehlen. Sie können die folgenden Typen von Schleifenkonstrukten verwenden in: AWSTOE
+ `for`Konstrukte — Iterieren Sie über eine begrenzte Folge von ganzen Zahlen.
+ `forEach`Konstrukte
  + `forEach`Schleife mit Eingabeliste — Iteriert über eine endliche Sammlung von Zeichenketten. 
  + `forEach`Schleife mit begrenzter Liste — Iteriert über eine endliche Sammlung von Zeichenketten, die durch ein Trennzeichen verbunden sind.

**Anmerkung**  
Schleifenkonstrukte unterstützen nur Zeichenkettendatentypen.

**Topics**
+ [Referenz-Iterationsvariablen](#toe-loop-iteration-variables)
+ [Arten von Looping-Konstrukten](#toe-loop-types)
+ [Felder für Schritte](#toe-loop-step-fields)
+ [Ausgaben für Schritt und Iteration](#toe-loop-step-output)

## Referenz-Iterationsvariablen
<a name="toe-loop-iteration-variables"></a>

Um auf den Index und den Wert der aktuellen Iterationsvariablen zu verweisen, `{{ loop.* }}` muss der Referenzausdruck im Eingabekörper eines Schritts verwendet werden, der ein Schleifenkonstrukt enthält. Dieser Ausdruck kann nicht verwendet werden, um auf die Iterationsvariablen des Schleifenkonstrukts eines anderen Schritts zu verweisen.

Der Referenzausdruck besteht aus den folgenden Elementen:
+ `{{ loop.index }}`— Die Ordinalposition der aktuellen Iteration, die indexiert ist. `0` 
+ `{{ loop.value }}`— Der Wert, der der aktuellen Iterationsvariablen zugeordnet ist. 

### Namen von Schleifen
<a name="toe-loop-iteration-variables-names"></a>

 Alle Schleifenkonstrukte haben ein optionales Namensfeld zur Identifizierung. Wenn ein Schleifenname angegeben wird, kann er verwendet werden, um auf Iterationsvariablen im Eingabekörper des Schritts zu verweisen. Um auf die Iterationsindizes und Werte einer benannten Schleife zu verweisen, verwenden Sie `{{ <loop_name>.* }}` with `{{ loop.* }}` im Eingabebereich des Schritts. Dieser Ausdruck kann nicht verwendet werden, um auf das benannte Schleifenkonstrukt eines anderen Schritts zu verweisen. 

Der Referenzausdruck besteht aus den folgenden Elementen:
+ `{{ <loop_name>.index }}`— Die Ordinalposition der aktuellen Iteration der benannten Schleife, die indexiert ist. `0`
+ `{{ <loop_name>.value }}`— Der Wert, der der aktuellen Iterationsvariablen der benannten Schleife zugeordnet ist.

### Referenzausdrücke auflösen
<a name="toe-loop-iteration-variables-expressions"></a>

Der AWSTOE löst Referenzausdrücke wie folgt auf: 
+ `{{ <loop_name>.* }}`— AWSTOE löst diesen Ausdruck mit der folgenden Logik auf:
  + Wenn die Schleife des aktuell laufenden Schritts mit dem `<loop_name>` Wert übereinstimmt, wird der Referenzausdruck in das Schleifenkonstrukt des aktuell laufenden Schritts aufgelöst.
  + `<loop_name>`wird in das benannte Schleifenkonstrukt aufgelöst, wenn es im aktuell laufenden Schritt vorkommt.
+ `{{ loop.* }}`— AWSTOE löst den Ausdruck unter Verwendung des Schleifenkonstrukts auf, das im aktuell ausgeführten Schritt definiert wurde.

Wenn Referenzausdrücke innerhalb eines Schritts verwendet werden, der keine Schleife enthält, werden die Ausdrücke AWSTOE nicht aufgelöst und sie erscheinen im Schritt ohne Ersatz. 

**Anmerkung**  
Referenzausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit sie vom YAML-Compiler korrekt interpretiert werden.

## Arten von Looping-Konstrukten
<a name="toe-loop-types"></a>

Dieser Abschnitt enthält Informationen und Beispiele zu Schleifenkonstrukttypen, die in der verwendet werden können. AWSTOE

**Topics**
+ [`for`Schleife](#toe-loop-types-for)
+ [`forEach`Schleife mit Eingabeliste](#toe-loop-types-foreach)
+ [`forEach`Schleife mit begrenzter Liste](#toe-loop-types-foreach-delimited)

### `for`Schleife
<a name="toe-loop-types-for"></a>

Die `for` Schleife iteriert über einen Bereich von ganzen Zahlen, die innerhalb einer Grenze angegeben sind, die durch den Anfang und das Ende der Variablen umrissen wird. Die iterierenden Werte befinden sich in der Menge `[start, end]` und enthalten Grenzwerte.

AWSTOE überprüft die `updateBy` Werte`start`, und`end`, um sicherzustellen, dass die Kombination nicht zu einer Endlosschleife führt.

`for`Schleifenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      for:
        start: int
        end: int
        updateBy: int
inputs:
  ...
```


**`for`Schleifeneingabe**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  Nein  |  ""  | 
|  `start`  | Startwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken.  |  Ganzzahl  |  Ja  |  –  | 
| `end` | Endwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken.  | Ganzzahl | Ja | – | 
| `updateBy` | Unterschied, um den ein iterierender Wert durch Addition aktualisiert wird. Es muss ein negativer oder positiver Wert ungleich Null sein. Akzeptiert keine Verkettung von Ausdrücken.  | Ganzzahl | Ja | – | 

`for`Beispiel für eine Schleifeneingabe

```
  - name: "CalculateFileUploadLatencies"
    action: "ExecutePowerShell"
    loop:
      for:
        start: 100000
        end: 1000000
        updateBy: 100000
    inputs:
      commands:
        - |
          $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite
          $f.SetLength({{ loop.value }}MB)
          $f.Close()
        - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt
        - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json
        - |
          Remove-Item -Path c:\temp\test{{ loop.index }}.txt
          Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json
```

### `forEach`Schleife mit Eingabeliste
<a name="toe-loop-types-foreach"></a>

Die `forEach` Schleife iteriert anhand einer expliziten Werteliste, bei der es sich um Zeichenketten und verkettete Ausdrücke handeln kann. 

`forEach`Schleife mit Eingabelistenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        - "string"
    inputs:
  ...
```


**`forEach`Schleife mit Eingabe in die Eingabeliste**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  Nein  |  ""  | 
|  Liste der Zeichenketten der `forEach` Schleife  |  Liste der Zeichenketten für die Iteration. Akzeptiert verkettete Ausdrücke als Zeichenketten in der Liste. Verkettete Ausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit der YAML-Compiler sie korrekt interpretieren kann.  |  Liste von Zeichenfolgen  |  Ja  |  –  | 

`forEach`Schleife mit Eingabeliste, Beispiel 1

```
  - name: "ExecuteCustomScripts"
    action: "ExecuteBash"
    loop:
      name: BatchExecLoop
      forEach:
        - /tmp/script1.sh
        - /tmp/script2.sh
        - /tmp/script3.sh
    inputs:
      commands:
        - echo "Count {{ BatchExecLoop.index }}"
        - sh "{{ loop.value }}"
        - |
          retVal=$?
          if [ $retVal -ne 0 ]; then
            echo "Failed"
          else
            echo "Passed"
         fi
```

`forEach`Schleife mit Eingabeliste, Beispiel 2

```
  - name: "RunMSIWithDifferentArgs"
    action: "ExecuteBinary"
    loop:
      name: MultiArgLoop
      forEach:
        - "ARG1=C:\Users ARG2=1"
        - "ARG1=C:\Users"
        - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt"
    inputs:
      commands:
        path: "c:\users\administrator\downloads\runner.exe"
        args:
          - "{{ MultiArgLoop.value }}"
```

`forEach`Schleife mit Eingabeliste, Beispiel 3

```
  - name: "DownloadAllBinaries"
    action: "S3Download"
    loop:
      name: MultiArgLoop
      forEach:
        - "bin1.exe"
        - "bin10.exe"
        - "bin5.exe"
    inputs:
      - source: "s3://bucket/{{ loop.value }}"
        destination: "c:\temp\{{ loop.value }}"
```

### `forEach`Schleife mit begrenzter Liste
<a name="toe-loop-types-foreach-delimited"></a>

Die Schleife iteriert über eine Zeichenfolge, die Werte enthält, die durch ein Trennzeichen getrennt sind. Um über die Bestandteile der Zeichenfolge zu iterieren, AWSTOE verwendet sie das Trennzeichen, um die Zeichenfolge in ein Array aufzuteilen, das für die Iteration geeignet ist. 

`forEach`Schleife mit einem durch Trennzeichen getrennten Listenschema

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        list: "string"
        delimiter: ".,;:\n\t -_"
    inputs:
  ...
```


**`forEach`Schleife mit begrenzter Listeneingabe**  

| Feld | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
|  `name`  | Der Schleife wurde ein eindeutiger Name gegeben. Er sollte im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |  Zeichenfolge  |  Nein  |  ""  | 
|  `list`  | Eine Zeichenfolge, die aus einzelnen Zeichenketten besteht, die durch ein gemeinsames Trennzeichen miteinander verbunden sind. Akzeptiert auch verkettete Ausdrücke. Stellen Sie bei verketteten Ausdrücken sicher, dass diese in doppelte Anführungszeichen eingeschlossen sind, damit sie vom YAML-Compiler korrekt interpretiert werden können. | Zeichenfolge |  Ja  |  –  | 
| `delimiter` | Zeichen, das verwendet wird, um Zeichenketten innerhalb eines Blocks voneinander zu trennen. Die Standardeinstellung ist das Kommazeichen. Aus der angegebenen Liste ist nur ein Trennzeichen zulässig: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-looping-constructs.html) Verkettungsausdrücke können nicht verwendet werden. | Zeichenfolge | Nein | Komma: "," | 

**Anmerkung**  
Der Wert von `list` wird als unveränderliche Zeichenfolge behandelt. Wenn die Quelle von während der Laufzeit geändert `list` wird, wird dies während der Ausführung nicht berücksichtigt.

`forEach`Schleife mit begrenzter Liste, Beispiel 1

In diesem Beispiel wird das folgende Verkettungsausdrucksmuster verwendet, um auf die Ausgabe eines anderen Schritts zu verweisen:. `<phase_name>.<step_name>.[inputs | outputs].<var_name>`

```
  - name: "RunMSIs"
    action: "ExecuteBinary"
    loop:
      forEach:
        list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}"
        delimiter: "\n"
    inputs:
      commands:
        path: "{{ loop.value }}"
```

`forEach`Schleife mit begrenzter Liste, Beispiel 2

```
  - name: "UploadMetricFiles"
    action: "S3Upload"
    loop:
      forEach:
        list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..."
    inputs:
      commands:
        - source: "{{ loop.value }}"
          destination: "s3://bucket/key/{{ loop.value }}"
```

## Felder für Schritte
<a name="toe-loop-step-fields"></a>

Loops sind Teil eines Schritts. Felder, die sich auf die Ausführung eines Schritts beziehen, werden nicht auf einzelne Iterationen angewendet. Schrittfelder gelten nur auf Schrittebene, und zwar wie folgt:
+ *timeoutSeconds* — Alle Iterationen der Schleife müssen innerhalb des in diesem Feld angegebenen Zeitraums ausgeführt werden. Wenn bei der Schleifenausführung eine AWSTOE Zeitüberschreitung eintritt, wird die Wiederholungsrichtlinie des Schritts ausgeführt und der Timeout-Parameter für jeden neuen Versuch zurückgesetzt. Wenn der Schleifenlauf nach Erreichen der maximalen Anzahl von Wiederholungen den Timeout-Wert überschreitet, gibt die Fehlermeldung des Schritts an, dass für den Schleifenlauf eine Zeitüberschreitung aufgetreten ist. 
+ *onFailure* — Die Fehlerbehandlung wird wie folgt auf den Schritt angewendet:
  + Wenn *onFailure* auf gesetzt ist`Abort`, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und beendet die Ausführung des Prozesses.

    AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf`Failed`.
**Anmerkung**  
Nach dem fehlgeschlagenen Schritt werden keine weiteren Schritte ausgeführt.
  + Wenn *onFailure* auf gesetzt ist`Continue`, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und fährt mit der Ausführung des nächsten Schritts fort.

    AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf`Failed`.
  + Wenn *onFailure* auf gesetzt ist`Ignore`, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als `IgnoredFailure` und fährt mit der Ausführung des nächsten Schritts fort.

    AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf`SuccessWithIgnoredFailure`.
**Anmerkung**  
Dies wird immer noch als erfolgreiche Ausführung angesehen, enthält jedoch Informationen, die Sie darüber informieren, dass ein oder mehrere Schritte fehlgeschlagen sind und ignoriert wurden.
+ *maxAttempts* — Bei jeder Wiederholung werden der gesamte Schritt und alle Iterationen von Anfang an ausgeführt.
+ *Status* — Der Gesamtstatus der Ausführung eines Schritts. `status`stellt nicht den Status einzelner Iterationen dar. Der Status eines Schritts mit Schleifen wird wie folgt bestimmt:
  + Wenn eine einzelne Iteration nicht ausgeführt werden kann, weist der Status eines Schritts auf einen Fehler hin.
  + Wenn alle Iterationen erfolgreich sind, deutet der Status eines Schritts auf Erfolg hin.
+ *StartTime* — Die Gesamtstartzeit der Ausführung eines Schritts. Stellt nicht die Startzeit einzelner Iterationen dar.
+ *EndTime* — Die Gesamtendzeit der Ausführung eines Schritts. Stellt nicht die Endzeit einzelner Iterationen dar.
+ *FailureMessage — Schließt* die Iterationsindizes ein, die bei Fehlern ohne Timeout fehlgeschlagen sind. Bei Timeoutfehlern gibt die Meldung an, dass der Schleifenlauf fehlgeschlagen ist. Es werden keine individuellen Fehlermeldungen für jede Iteration bereitgestellt, um die Größe der Fehlermeldungen zu minimieren.

## Ausgaben für Schritt und Iteration
<a name="toe-loop-step-output"></a>

Jede Iteration enthält eine Ausgabe. Am Ende eines Schleifenlaufs AWSTOE konsolidiert es alle erfolgreichen Iterationsausgaben in. `detailedOutput.json` Die konsolidierten Ausgaben sind eine Zusammenstellung von Werten, die zu den entsprechenden Ausgabeschlüsseln gehören, wie sie im Ausgabeschema des Aktionsmoduls definiert sind. Das folgende Beispiel zeigt, wie die Ausgaben konsolidiert werden:

**Ausgabe von `ExecuteBash` für Iteration 1**

```
{
	"stdout":"Hello"
}
```

**Ausgabe von `ExecuteBash` für Iteration 2**

```
{
	"stdout":"World"
}
```

**Ausgabe von `ExecuteBash` für Schritt**

```
{
	"stdout":"Hello\nWorld"
}
```

Zum Beispiel `ExecuteBinary` sind `ExecuteBash``ExecutePowerShell`, und Aktionsmodule, die `STDOUT` als Aktionsmodulausgabe zurückgegeben werden. `STDOUT`Nachrichten werden mit dem neuen Zeilenzeichen verknüpft, um die Gesamtausgabe des Step-In zu erzeugen`detailedOutput.json`.

AWSTOE konsolidiert nicht die Ausgaben erfolgloser Iterationen.

# Aktionsmodule, die vom AWSTOE Komponentenmanager unterstützt werden
<a name="toe-action-modules"></a>

Image-Building-Services wie EC2 Image Builder verwenden AWSTOE Aktionsmodule, um die EC2-Instances zu konfigurieren, die zum Erstellen und Testen von benutzerdefinierten Computer-Images verwendet werden. In diesem Abschnitt werden die Funktionen häufig verwendeter AWSTOE Aktionsmodule und deren Konfiguration sowie Beispiele beschrieben.

Komponenten werden mit YAML-Dokumenten im Klartext verfasst. Weitere Hinweise zur Dokumentensyntax finden Sie unter. [Verwenden Sie das AWSTOE Component Document Framework für benutzerdefinierte Komponenten](toe-use-documents.md)

**Anmerkung**  
Alle Aktionsmodule verwenden dasselbe Konto wie der Systems Manager Manager-Agent, wenn sie ausgeführt werden, was `root` unter Linux und `NT Authority\SYSTEM` unter Windows der Fall ist.

Der folgende Querverweis kategorisiert Aktionsmodule nach der Art der Aktionen, die sie ausführen.

 

**Allgemeine Ausführung**
+ [Assert (Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash (Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary (Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument (Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell (Windows)](#action-modules-executepowershell)

 

**Datei herunterladen und hochladen**
+ [S3 herunterladen (Linux, Windows, macOS)](#action-modules-s3download)
+ [S3 hochladen (Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload (Linux, Windows, macOS)](#action-modules-webdownload)

 

**Operationen im Dateisystem**
+ [AppendFile (Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile (Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder (Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile (Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder (Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink (Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile (Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder (Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles (Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile (Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder (Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile (Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding (Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner (Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner (Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions (Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions (Linux, Windows, macOS)](#action-modules-setfolderpermissions)

 

**Aktionen zur Softwareinstallation**
+ [Installieren Sie MSI (Windows)](#action-modules-install-msi)
+ [Deinstallieren Sie MSI (Windows)](#action-modules-uninstall-msi)

 

**Systemaktionen**
+ [Neustart (Linux, Windows)](#action-modules-reboot)
+ [SetRegistry (Windows)](#action-modules-setregistry)
+ [OS aktualisieren (Linux, Windows)](#action-modules-updateos)

## Allgemeine Ausführungsmodule
<a name="action-modules-general-execution"></a>

Der folgende Abschnitt enthält Einzelheiten zu Aktionsmodulen, die Befehle ausführen und den Ausführungsablauf steuern.

**Topics**
+ [Assert (Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash (Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary (Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument (Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell (Windows)](#action-modules-executepowershell)

### Assert (Linux, Windows, macOS)
<a name="action-modules-assertion"></a>

Das **Assert-Aktionsmodul** führt Wertvergleiche mit [Vergleichsoperatoren](toe-comparison-operators.md) oder [Logische Operatoren](toe-logical-operators.md) als Eingabe durch. Das Ergebnis des Operatorausdrucks (wahr oder falsch) gibt den allgemeinen Erfolgs- oder Fehlerstatus für den Schritt an.

Ergibt der Vergleich oder der Ausdruck des logischen Operators das Ergebnis`true`, wird der Schritt als `Success` markiert. Andernfalls ist der Schritt als `Failed` markiert. Schlägt der Schritt fehl, entscheidet der `onFailure` Parameter über das Ergebnis des Schritts.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| input | Enthält einen einzelnen Vergleichs- oder logischen Operator. Beachten Sie, dass logische Operatoren mehr als einen Vergleichsoperator enthalten können. | Dies ist je nach Operator variabel | Ja | 

**Eingabebeispiel: Ein einfacher Vergleich mit dem `stringEquals` Vergleichsoperator**

In diesem Beispiel wird das Ergebnis als ausgewertet. `true`

```
- name: StringComparison
  action: Assert
  inputs:
    stringEquals: '2.1.1'
    value: '{{ validate.ApplicationVersion.outputs.stdout }}'
```

**Eingabebeispiel: Regex-Vergleiche mit dem Vergleichsoperator `patternMatches`**

Diese Beispiele werden alle zu ausgewertet. `true`

```
- name: Letters only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z]+$'
    value: 'ThisIsOnlyLetters'

- name: Letters and spaces only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z\s]+$'
    value: 'This text contains spaces'
  
- name: Numbers only
  action: Assert
  inputs:
    patternMatches: '^[0-9]+$'
    value: '1234567890'
```

**Eingabebeispiel: Verschachtelte Vergleiche mit logischen Operatoren und verketteten Variablen**

Das folgende Beispiel zeigt verschachtelte Vergleiche mit logischen Operatoren, die Vergleiche mit verketteten Variablen verwenden. Das gibt `Assert` an, `true` ob eine der folgenden Aussagen zutrifft:
+ Der `ApplicationVersion` ist größer als `2.0` und ist `CPUArchitecture` gleich`arm64`.
+ Das `CPUArchitecture` Gleiche`x86_64`.

```
- name: NestedComparisons
  action: Assert
  inputs:
    or: # <- first level deep
      - and: # <- second level deep
          - numberGreaterThan: 2.0 # <- third level deep
            value: '{{ validate.ApplicationVersion.outputs.stdout }}'
          - stringEquals: 'arm64'
            value: '{{ validate.CPUArchitecture.outputs.stdout }}'
      - stringEquals: 'x86_64'
        value: '{{ validate.CPUArchitecture.outputs.stdout }}'
```

**Ausgabe:**

Die Ausgabe von an `Assert` ist Erfolg oder Misserfolg des Schritts.

### ExecuteBash (Linux, macOS)
<a name="action-modules-executebash"></a>

Das **ExecuteBash**Aktionsmodul ermöglicht es Ihnen, Bash-Skripte mit Inline-Shell-Code/Befehlen auszuführen. Dieses Modul unterstützt Linux. 

Alle Befehle und Anweisungen, die Sie im Befehlsblock angeben, werden in eine Datei konvertiert (zum Beispiel`input.sh`) und mit der Bash-Shell ausgeführt. Das Ergebnis der Ausführung der Shell-Datei ist der Exit-Code des Schritts. 

Das **ExecuteBash**Modul verarbeitet Systemneustarts, wenn das Skript mit dem Exit-Code beendet wird. `194` Nach der Initiierung führt das Programm eine der folgenden Aktionen aus:
+ Die Anwendung übergibt dem Aufrufer den Exit-Code, wenn er vom Systems Manager Agent ausgeführt wird. Der Systems Manager Agent führt den Systemneustart durch und führt denselben Schritt aus, der den Neustart initiiert hat, wie unter [Managed Instance from Scripts neu starten](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html) beschrieben.
+ Die Anwendung speichert die aktuellen Daten`executionstate`, konfiguriert einen Neustart-Trigger, um die Anwendung erneut auszuführen, und startet das System neu.

Nach dem Systemneustart führt die Anwendung denselben Schritt aus, der den Neustart initiiert hat. Wenn Sie diese Funktionalität benötigen, müssen Sie idempotente Skripten schreiben, die mehrere Aufrufe desselben Shell-Befehls verarbeiten können.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| commands | Enthält eine Liste von Anweisungen oder Befehlen, die gemäß der Bash-Syntax ausgeführt werden sollen. Mehrzeiliges YAML ist zulässig. | Auflisten | Ja | 

**Eingabebeispiel: Vor und nach einem Neustart**

```
name: ExitCode194Example
description: This shows how the exit code can be used to restart a system with ExecuteBash
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecuteBash
        inputs:
          commands:
            - |
              REBOOT_INDICATOR=/var/tmp/reboot-indicator
              if [ -f "${REBOOT_INDICATOR}" ]; then
                echo 'The reboot file exists. Deleting it and exiting with success.'
                rm "${REBOOT_INDICATOR}"
                exit 0
              fi
              echo 'The reboot file does not exist. Creating it and triggering a restart.'
              touch "${REBOOT_INDICATOR}"
              exit 194
```


**Ausgabe**  

| Feld | Description | Typ | 
| --- | --- | --- | 
| stdout | Standardausgabe der Befehlsausführung. | Zeichenfolge | 

Wenn Sie einen Neustart starten und den Exit-Code `194` als Teil des Aktionsmoduls zurückgeben, wird der Build mit demselben Aktionsmodulschritt fortgesetzt, der den Neustart initiiert hat. Wenn Sie einen Neustart ohne den Exit-Code starten, schlägt der Build-Prozess möglicherweise fehl.

**Ausgabebeispiel: Vor dem Neustart (zum ersten Mal über das Dokument)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**Ausgabebeispiel: Nach dem Neustart (zweites Mal durch das Dokument)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

### ExecuteBinary (Linux, Windows, macOS)
<a name="action-modules-executebinary"></a>

Das **ExecuteBinary**Aktionsmodul ermöglicht es Ihnen, Binärdateien mit einer Liste von Befehlszeilenargumenten auszuführen.

Das **ExecuteBinary**Modul verarbeitet Systemneustarts, wenn die Binärdatei mit dem Exit-Code `194` (Linux) oder `3010` (Windows) beendet wird. In diesem Fall führt das Programm eine der folgenden Aktionen aus:
+ Die Anwendung übergibt dem Aufrufer den Exit-Code, wenn er vom Systems Manager Agent ausgeführt wird. Der Systems Manager Agent übernimmt den Neustart des Systems und führt denselben Schritt aus, der den Neustart initiiert hat, wie unter [Managed Instance from Scripts neu starten](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html) beschrieben.
+ Die Anwendung speichert den aktuellen Status`executionstate`, konfiguriert einen Neustart-Trigger, um die Anwendung erneut auszuführen, und startet das System neu.

Nach dem Neustart des Systems führt die Anwendung denselben Schritt aus, der den Neustart initiiert hat. Wenn Sie diese Funktionalität benötigen, müssen Sie idempotente Skripten schreiben, die mehrere Aufrufe desselben Shell-Befehls verarbeiten können.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| path | Der Pfad zur Binärdatei für die Ausführung. | Zeichenfolge | Ja | 
| arguments | Enthält eine Liste von Befehlszeilenargumenten, die beim Ausführen der Binärdatei verwendet werden sollen. | Liste der Zeichenketten | Nein | 

**Eingabebeispiel: .NET installieren**

```
  - name: "InstallDotnet"
    action: ExecuteBinary
    inputs:
      path: C:\PathTo\dotnet_installer.exe
      arguments:
        - /qb
        - /norestart
```


**Ausgabe**  

| Feld | Description | Typ | 
| --- | --- | --- | 
| stdout | Standardausgabe der Befehlsausführung. | Zeichenfolge | 

**Output example**

```
{
	"stdout": "success"
}
```

### ExecuteDocument (Linux, Windows, macOS)
<a name="action-modules-executedocument"></a>

Das **ExecuteDocument**Aktionsmodul bietet Unterstützung für verschachtelte Komponentendokumente, sodass mehrere Komponentendokumente aus einem Dokument ausgeführt werden. AWSTOE validiert das Dokument, das zur Laufzeit im Eingabeparameter übergeben wird.

**Einschränkungen**
+ Dieses Aktionsmodul wird einmal ausgeführt. Wiederholungen sind nicht zulässig und es besteht keine Option zum Festlegen von Timeoutlimits. **ExecuteDocument**legt die folgenden Standardwerte fest und gibt einen Fehler zurück, wenn Sie versuchen, sie zu ändern.
  + `timeoutSeconds`: -1
  + `maxAttempts`: 1
**Anmerkung**  
Sie können diese Werte leer lassen und AWSTOE die Standardwerte verwenden.
+ Das Verschachteln von Dokumenten ist bis zu drei Ebenen zulässig, jedoch nicht mehr. Drei Verschachtelungsebenen bedeuten vier Dokumentebenen, da die oberste Ebene nicht verschachtelt ist. In diesem Szenario darf das Dokument der untersten Ebene keine anderen Dokumente aufrufen.
+ Die zyklische Ausführung von Komponentendokumenten ist nicht zulässig. Jedes Dokument, das sich selbst außerhalb eines sich wiederholenden Konstrukts aufruft oder ein anderes Dokument aufruft, das in der aktuellen Ausführungskette weiter oben steht, leitet einen Zyklus ein, der zu einer Endlosschleife führen kann. Wenn eine zyklische Ausführung AWSTOE erkannt wird, stoppt es die Ausführung und zeichnet den Fehler auf.

![\[Einschränkungen auf Verschachtelungsebene für das ExecuteDocument Aktionsmodul.\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/images/toe-component-document-nesting.png)


Wenn ein Komponentendokument versucht, sich selbst oder eines der Komponentendokumente auszuführen, die in der aktuellen Ausführungskette weiter oben stehen, schlägt die Ausführung fehl.

**Eingabe**


| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| document |  Pfad des Komponentendokuments. Gültige Optionen sind unter anderem: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Zeichenfolge | Ja | 
| document-s3-bucket-owner |  Die Konto-ID des S3-Bucket-Besitzers für den S3-Bucket, in dem Komponentendokumente gespeichert sind. *(Empfohlen, wenn Sie S3 URIs in Ihrem Komponentendokument verwenden.)*  | Zeichenfolge | Nein | 
| phases |  Phasen, die im Komponentendokument ausgeführt werden sollen, ausgedrückt als kommagetrennte Liste. Wenn keine Phasen angegeben sind, werden alle Phasen ausgeführt.  | Zeichenfolge | Nein | 
| parameters |  Eingabeparameter, die zur Laufzeit als Schlüssel-Wert-Paare an das Komponentendokument übergeben werden.  | Liste der Parameterzuordnungen | Nein | 

**Eingabe der Parameterzuweisung**


| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| name |  Der Name des Eingabeparameters, der an das Komponentendokument übergeben werden soll, das das **ExecuteDocument**Aktionsmodul ausführt.  | Zeichenfolge | Ja | 
| value |  Der Wert des Eingabeparameters.  | Zeichenfolge | Ja | 

**Beispiele für die Eingabe**  
Die folgenden Beispiele zeigen Variationen der Eingaben für Ihr Komponentendokument, abhängig von Ihrem Installationspfad.

**Eingabebeispiel: Lokaler Dokumentpfad**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: Sample-1.yaml
          phases: build
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Eingabebeispiel: S3-URI als Dokumentenpfad**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: s3://my-bucket/Sample-1.yaml
          document-s3-bucket-owner: 123456789012
          phases: build,validate
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Eingabebeispiel: ARN der EC2 Image Builder Builder-Komponente als Dokumentpfad**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: arn:aws:imagebuilder:us-west-2:aws:component/Sample-Test/1.0.0
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Verwenden einer ForEach Schleife zum Ausführen von Dokumenten**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForEachLoop'
          forEach:
            - Sample-1.yaml
            - Sample-2.yaml
        inputs:
          document: "{{myForEachLoop.value}}"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Verwenden einer For-Schleife zum Ausführen von Dokumenten**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForLoop'
          for:
            start: 1
            end: 2
            updateBy: 1
        inputs:
          document: "Sample-{{myForLoop.value}}.yaml"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Ausgabe**  
AWSTOE erstellt eine Ausgabedatei, die `detailedoutput.json` bei jeder Ausführung aufgerufen wird. Die Datei enthält Details zu jeder Phase und jedem Schritt jedes Komponentendokuments, das während der Ausführung aufgerufen wird. Für das **ExecuteDocument**Aktionsmodul finden Sie in dem `outputs` Feld eine kurze Zusammenfassung der Laufzeit sowie Einzelheiten zu den Phasen, Schritten und Dokumenten, in denen es ausgeführt wird. `detailedOutput`

```
{
	\"executedStepCount\":1,\"executionId\":\"97054e22-06cc-11ec-9b14-acde48001122\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"
}",
```

Das Ausgabe-Übersichtsobjekt jedes Komponentendokuments enthält die folgenden Details, wie hier gezeigt, mit Beispielwerten:
+ executedStepCount„:1
+ „Ausführungs-ID“: „12345a67-89bc-01de-2f34-abcd56789012"
+ failedStepCount„: 0
+ „Fehlermeldung“: "“
+ „ignoredFailedStepAnzahl“ :0
+ „Protokoll-URL“: "“
+ „status“: „erfolgreich“

**Ausgabebeispiel**  
Das folgende Beispiel zeigt die Ausgabe des **ExecuteDocument**Aktionsmoduls, wenn eine verschachtelte Ausführung stattfindet. In diesem Beispiel führt das `main.yaml` Komponentendokument das Komponentendokument erfolgreich aus. `Sample-1.yaml`

```
{
    "executionId": "12345a67-89bc-01de-2f34-abcd56789012",
    "status": "success",
    "startTime": "2021-08-26T17:20:31-07:00",
    "endTime": "2021-08-26T17:20:31-07:00",
    "failureMessage": "",
    "documents": [
        {
            "name": "",
            "filePath": "main.yaml",
            "status": "success",
            "description": "",
            "startTime": "2021-08-26T17:20:31-07:00",
            "endTime": "2021-08-26T17:20:31-07:00",
            "failureMessage": "",
            "phases": [
                {
                    "name": "build",
                    "status": "success",
                    "startTime": "2021-08-26T17:20:31-07:00",
                    "endTime": "2021-08-26T17:20:31-07:00",
                    "failureMessage": "",
                    "steps": [
                        {
                            "name": "ExecuteNestedDocument",
                            "status": "success",
                            "failureMessage": "",
                            "timeoutSeconds": -1,
                            "onFailure": "Abort",
                            "maxAttempts": 1,
                            "action": "ExecuteDocument",
                            "startTime": "2021-08-26T17:20:31-07:00",
                            "endTime": "2021-08-26T17:20:31-07:00",
                            "inputs": "[{\"document\":\"Sample-1.yaml\",\"document-s3-bucket-owner\":\"\",\"phases\":\"\",\"parameters\":null}]",
                            "outputs": "[{\"executedStepCount\":1,\"executionId\":\"98765f43-21ed-09cb-8a76-fedc54321098\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"}]",
                            "loop": null,
                            "detailedOutput": [
                                {
                                    "executionId": "98765f43-21ed-09cb-8a76-fedc54321098",
                                    "status": "success",
                                    "startTime": "2021-08-26T17:20:31-07:00",
                                    "endTime": "2021-08-26T17:20:31-07:00",
                                    "failureMessage": "",
                                    "documents": [
                                        {
                                            "name": "",
                                            "filePath": "Sample-1.yaml",
                                            "status": "success",
                                            "description": "",
                                            "startTime": "2021-08-26T17:20:31-07:00",
                                            "endTime": "2021-08-26T17:20:31-07:00",
                                            "failureMessage": "",
                                            "phases": [
                                                {
                                                    "name": "build",
                                                    "status": "success",
                                                    "startTime": "2021-08-26T17:20:31-07:00",
                                                    "endTime": "2021-08-26T17:20:31-07:00",
                                                    "failureMessage": "",
                                                    "steps": [
                                                        {
                                                            "name": "ExecuteBashStep",
                                                            "status": "success",
                                                            "failureMessage": "",
                                                            "timeoutSeconds": 7200,
                                                            "onFailure": "Abort",
                                                            "maxAttempts": 1,
                                                            "action": "ExecuteBash",
                                                            "startTime": "2021-08-26T17:20:31-07:00",
                                                            "endTime": "2021-08-26T17:20:31-07:00",
                                                            "inputs": "[{\"commands\":[\"echo \\\"Hello World!\\\"\"]}]",
                                                            "outputs": "[{\"stdout\":\"Hello World!\"}]",
                                                            "loop": null,
                                                            "detailedOutput": null
                                                        }]
                                                }]
                                        }]
                                }]
                        }]
                
                }]
        }]
}
```

### ExecutePowerShell (Windows)
<a name="action-modules-executepowershell"></a>

Das **ExecutePowerShell**Aktionsmodul ermöglicht es Ihnen, PowerShell Skripts mit Inline-Shell-Code/Befehlen auszuführen. Dieses Modul unterstützt die Windows-Plattform und Windows. PowerShell

Alle im Befehlsblock commands/instructions angegebenen Befehle werden in eine Skriptdatei konvertiert (z. B.`input.ps1`) und unter Windows ausgeführtPowerShell. Das Ergebnis der Ausführung der Shell-Datei ist der Exit-Code.

Das **ExecutePowerShell**Modul verarbeitet Systemneustarts, wenn der Shell-Befehl mit dem Exit-Code von beendet wird. `3010` Nach der Initiierung führt das Programm eine der folgenden Aktionen aus: 
+ Übergibt dem Anrufer den Exit-Code, wenn er vom Systems Manager Agent ausgeführt wird. Der Systems Manager Agent führt den Systemneustart durch und führt denselben Schritt aus, der den Neustart initiiert hat, wie unter [Managed Instance from Scripts neu starten](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html) beschrieben.
+ Speichert den aktuellen Status`executionstate`, konfiguriert einen Neustart-Trigger, um die Anwendung erneut auszuführen, und startet das System neu.

Nach dem Systemneustart führt die Anwendung denselben Schritt aus, der den Neustart initiiert hat. Wenn Sie diese Funktionalität benötigen, müssen Sie idempotente Skripten schreiben, die mehrere Aufrufe desselben Shell-Befehls verarbeiten können.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| commands | Enthält eine Liste von Anweisungen oder Befehlen, die gemäß der Syntax ausgeführt werden sollen. PowerShell Mehrzeiliges YAML ist zulässig. | String-Liste | Ja. Muss `commands` oder angeben`file`, nicht beides.  | 
| file | Enthält den Pfad zu einer PowerShell Skriptdatei. PowerShell wird mit dem -file Befehlszeilenargument gegen diese Datei ausgeführt. Der Pfad muss auf eine .ps1 Datei verweisen. | Zeichenfolge | Ja. Muss `commands` oder`file`, nicht beides, angeben.  | 

**Eingabebeispiel: Vor und nach einem Neustart**

```
name: ExitCode3010Example
description: This shows how the exit code can be used to restart a system with ExecutePowerShell
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecutePowerShell
        inputs:
          commands:
            - |
              $rebootIndicator = Join-Path -Path $env:SystemDrive -ChildPath 'reboot-indicator'
              if (Test-Path -Path $rebootIndicator) {
                Write-Host 'The reboot file exists. Deleting it and exiting with success.'
                Remove-Item -Path $rebootIndicator -Force | Out-Null
                [System.Environment]::Exit(0)
              }
              Write-Host 'The reboot file does not exist. Creating it and triggering a restart.'
              New-Item -Path $rebootIndicator -ItemType File | Out-Null
              [System.Environment]::Exit(3010)
```


**Ausgabe**  

| Feld | Description | Typ | 
| --- | --- | --- | 
| stdout | Standardausgabe der Befehlsausführung. | Zeichenfolge | 

Wenn Sie einen Neustart ausführen und den Exit-Code `3010` als Teil des Aktionsmoduls zurückgeben, wird der Build mit demselben Aktionsmodulschritt fortgesetzt, der den Neustart initiiert hat. Wenn Sie einen Neustart ohne den Exit-Code ausführen, schlägt der Build-Prozess möglicherweise fehl.

**Ausgabebeispiel: Vor dem Neustart (zum ersten Mal über das Dokument)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**Ausgabebeispiel: Nach dem Neustart (zweites Mal durch das Dokument)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

## Module zum Herunterladen und Hochladen von Dateien
<a name="action-modules-download-upload"></a>

Der folgende Abschnitt enthält Informationen zu Aktionsmodulen, die Dateien hoch- oder herunterladen.

**Topics**
+ [S3 herunterladen (Linux, Windows, macOS)](#action-modules-s3download)
+ [S3 hochladen (Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload (Linux, Windows, macOS)](#action-modules-webdownload)

### S3 herunterladen (Linux, Windows, macOS)
<a name="action-modules-s3download"></a>

Mit dem `S3Download` Aktionsmodul können Sie ein Amazon S3 S3-Objekt oder eine Reihe von Objekten in eine lokale Datei oder einen Ordner herunterladen, den Sie mit dem `destination` Pfad angeben. Wenn am angegebenen Speicherort bereits eine Datei vorhanden ist und das `overwrite` Flag auf true gesetzt ist, wird die Datei `S3Download` überschrieben.

Ihr `source` Standort kann auf ein bestimmtes Objekt in Amazon S3 verweisen, oder Sie können ein key prefix mit einem Sternchen als Platzhalter (`*`) verwenden, um eine Reihe von Objekten herunterzuladen, die dem Schlüsselpräfixpfad entsprechen. Wenn Sie an Ihrem `source` Standort ein key prefix angeben, lädt das `S3Download` Aktionsmodul alles herunter, was dem Präfix entspricht (einschließlich Dateien und Ordner). Stellen Sie sicher, dass das key prefix mit einem Schrägstrich endet, gefolgt von einem Sternchen (`/*`), damit Sie alles herunterladen, was dem Präfix entspricht. Beispiel: `s3://my-bucket/my-folder/*`.

Wenn die `S3Download` Aktion für ein bestimmtes key prefix während eines Downloads fehlschlägt, wird der Ordnerinhalt nicht auf den Zustand vor dem Fehler zurückgesetzt. Der Zielordner bleibt so, wie er zum Zeitpunkt des Fehlers war.

**Unterstützte Anwendungsfälle**  
Das `S3Download` Aktionsmodul unterstützt die folgenden Anwendungsfälle:
+ Das Amazon S3 S3-Objekt wird in einen lokalen Ordner heruntergeladen, wie im Download-Pfad angegeben.
+ Amazon S3 S3-Objekte (mit einem key prefix im Amazon S3 S3-Dateipfad) werden in den angegebenen lokalen Ordner heruntergeladen, der rekursiv alle Amazon S3 S3-Objekte, die dem key prefix entsprechen, in den lokalen Ordner kopiert.

**IAM-Anforderungen**  
Die IAM-Rolle, die Sie Ihrem Instanzprofil zuordnen, muss über Berechtigungen zum Ausführen des `S3Download` Aktionsmoduls verfügen. Die folgenden IAM-Richtlinien müssen der IAM-Rolle angehängt werden, die dem Instanzprofil zugeordnet ist:
+ **Einzelne Datei**: `s3:GetObject` gegen bucket/object (zum Beispiel). `arn:aws:s3:::BucketName/*`
+ **Mehrere Dateien**: `s3:ListBucket` gegen bucket/object (zum Beispiel`arn:aws:s3:::BucketName`) und `s3:GetObject` gegen die bucket/object (zum Beispiel`arn:aws:s3:::BucketName/*`).


**Input**  

|  Key (Schlüssel)  |  Description  |  Typ  |  Erforderlich  |  Standard  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  Der Amazon S3 S3-Bucket, der die Quelle für Ihren Download ist. Sie können einen Pfad zu einem bestimmten Objekt angeben oder ein key prefix verwenden, das mit einem Schrägstrich endet, gefolgt von einem Sternchen-Platzhalter (`/*`), um eine Gruppe von Objekten herunterzuladen, die dem key prefix entsprechen.  |  Zeichenfolge  |  Ja  |  –  | 
|  `destination`  |  Der lokale Pfad, in den die Amazon S3 S3-Objekte heruntergeladen werden. Um eine einzelne Datei herunterzuladen, müssen Sie den Dateinamen als Teil des Pfads angeben. Beispiel, `/myfolder/package.zip`.  |  Zeichenfolge  |  Ja  |  –  | 
|  `expectedBucketOwner`  |  Erwartete Besitzerkonto-ID des im `source` Pfad angegebenen Buckets. Wir empfehlen Ihnen, die Inhaberschaft des in der Quelle angegebenen Amazon S3 S3-Buckets zu überprüfen.  |  Zeichenfolge  |  Nein  |  –  | 
|  `overwrite`  |  Wenn diese Einstellung auf true gesetzt ist und bereits eine Datei mit demselben Namen im Zielordner für den angegebenen lokalen Pfad existiert, überschreibt die Download-Datei die lokale Datei. Wenn der Wert auf false gesetzt ist, ist die vorhandene Datei auf dem lokalen System davor geschützt, überschrieben zu werden, und das Aktionsmodul schlägt mit einem Download-Fehler fehl. Beispiel: `Error: S3Download: File already exists and "overwrite" property for "destination" file is set to false. Cannot download.`  |  Boolesch  |  Nein  |  true  | 

**Anmerkung**  
In den folgenden Beispielen kann der Windows-Ordnerpfad durch einen Linux-Pfad ersetzt werden. `C:\myfolder\package.zip`Kann beispielsweise durch ersetzt werden`/myfolder/package.zip`.

**Eingabebeispiel: Ein Amazon S3 S3-Objekt in eine lokale Datei kopieren**  
Das folgende Beispiel zeigt, wie ein Amazon S3 S3-Objekt in eine lokale Datei kopiert wird.

```
  - name: DownloadMyFile
    action: S3Download
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
```

**Eingabebeispiel: Alle Amazon S3 S3-Objekte in einem Amazon S3 S3-Bucket mit key prefix in einen lokalen Ordner kopieren**  
Das folgende Beispiel zeigt, wie alle Amazon S3 S3-Objekte in einem Amazon S3-Bucket mit dem key prefix in einen lokalen Ordner kopiert werden. Amazon S3 hat kein Ordnerkonzept, daher werden alle Objekte kopiert, die dem key prefix entsprechen. Die maximale Anzahl von Objekten, die heruntergeladen werden können, beträgt 1000.

```
  - name: MyS3DownloadKeyprefix
    action: S3Download
    maxAttempts: 3
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
```

**Ausgabe**  
Keine.

### S3 hochladen (Linux, Windows, macOS)
<a name="action-modules-s3upload"></a>

Mit dem Aktionsmodul **S3Upload** können Sie eine Datei aus einer Quelldatei oder einem Quellordner an einen Amazon S3 S3-Speicherort hochladen. Sie können einen Platzhalter (`*`) in dem für Ihren Quellspeicherort angegebenen Pfad verwenden, um alle Dateien hochzuladen, deren Pfad dem Platzhaltermuster entspricht.

Wenn die rekursive **S3Upload-Aktion** fehlschlägt, verbleiben alle Dateien, die bereits hochgeladen wurden, im Amazon S3-Ziel-Bucket.

**Unterstützte Anwendungsfälle**
+ Lokale Datei zum Amazon S3 S3-Objekt.
+ Lokale Dateien im Ordner (mit Platzhalter) zum Amazon S3 S3-Schlüsselpräfix.
+ Kopieren Sie den lokalen Ordner (muss auf `recurse` eingestellt sein`true`) in das Amazon S3 S3-Schlüsselpräfix.

**IAM-Anforderungen**  
Die IAM-Rolle, die Sie Ihrem Instanzprofil zuordnen, muss über Berechtigungen zum Ausführen des `S3Upload` Aktionsmoduls verfügen. Die folgende IAM-Richtlinie muss der IAM-Rolle angehängt werden, die dem Instanzprofil zugeordnet ist. Die Richtlinie muss dem Amazon S3 S3-Ziel-Bucket `s3:PutObject` Berechtigungen gewähren. Beispiel, `arn:aws:s3:::BucketName/*`).


**Input**  

|  Key (Schlüssel)  |  Description  |  Typ  |  Erforderlich  |  Standard  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  Der lokale Pfad, aus dem die Quelle files/folders stammt. Der `source` unterstützt einen Sternchen-Platzhalter ()`*`.  |  Zeichenfolge  |  Ja  |  –  | 
|  `destination`  |  Der Pfad für den Amazon S3-Ziel-Bucket, in den Quelldateien/-ordner hochgeladen werden.  |  Zeichenfolge  |  Ja  |  –  | 
|  `recurse`  |  Wenn auf gesetzt, wird `true` **S3Upload** rekursiv ausgeführt.  |  Zeichenfolge  |  Nein  |  `false`  | 
|  `expectedBucketOwner`  |  Die erwartete Besitzerkonto-ID für den Amazon S3 S3-Bucket, der im Zielpfad angegeben ist. Wir empfehlen Ihnen, die Inhaberschaft des Amazon S3 S3-Buckets zu überprüfen, der im Ziel angegeben ist.  |  Zeichenfolge  |  Nein  |  –  | 

**Eingabebeispiel: Eine lokale Datei in ein Amazon S3 S3-Objekt kopieren**  
Das folgende Beispiel zeigt, wie eine lokale Datei in ein Amazon S3 S3-Objekt kopiert wird.

```
  - name: MyS3UploadFile
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\package.zip
        destination: s3://amzn-s3-demo-destination-bucket/path/to/package.zip
        expectedBucketOwner: 123456789022
```

**Eingabebeispiel: Kopieren Sie alle Dateien in einem lokalen Ordner in einen Amazon S3 S3-Bucket mit key prefix**  
Das folgende Beispiel zeigt, wie Sie alle Dateien im lokalen Ordner in einen Amazon S3 S3-Bucket mit key prefix kopieren. In diesem Beispiel werden keine Unterordner oder deren Inhalt kopiert, da dies nicht angegeben `recurse` ist. Die Standardeinstellung ist. `false`

```
  - name: MyS3UploadMultipleFiles
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        expectedBucketOwner: 123456789022
```

**Eingabebeispiel: Alle Dateien und Ordner rekursiv von einem lokalen Ordner in einen Amazon S3 S3-Bucket kopieren**  
Das folgende Beispiel zeigt, wie alle Dateien und Ordner rekursiv von einem lokalen Ordner in einen Amazon S3 S3-Bucket mit key prefix kopiert werden.

```
  - name: MyS3UploadFolder
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        recurse: true
        expectedBucketOwner: 123456789022
```

**Ausgabe**  
Keine.

### WebDownload (Linux, Windows, macOS)
<a name="action-modules-webdownload"></a>

Mit dem **WebDownload**Aktionsmodul können Sie Dateien und Ressourcen über das HTTP/HTTPS Protokoll von einem entfernten Standort herunterladen (*HTTPS wird empfohlen*). Die Anzahl oder Größe der Downloads ist unbegrenzt. Dieses Modul verarbeitet Wiederholungsversuche und exponentielle Backoff-Logik. 

Jedem Download-Vorgang werden je nach Benutzereingabe maximal 5 Versuche zugewiesen, um erfolgreich zu sein. Diese Versuche unterscheiden sich von den im `maxAttempts` Dokumentfeld angegebenen Versuchen`steps`, die sich auf Fehler im Aktionsmodul beziehen.

Dieses Aktionsmodul verarbeitet implizit Weiterleitungen. Alle HTTP-Statuscodes mit Ausnahme `200` von führen zu einem Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
| source | Die gültige HTTP/HTTPS URL (HTTPS wird empfohlen), die dem RFC 3986-Standard entspricht. Verkettungsausdrücke sind zulässig. | Zeichenfolge |  Ja  | – | 
| destination | Ein absoluter oder relativer Datei- oder Ordnerpfad auf dem lokalen System. Ordnerpfade müssen mit enden/. Wenn sie nicht mit enden/, werden sie als Dateipfade behandelt. Das Modul erstellt alle erforderlichen Dateien oder Ordner für erfolgreiche Downloads. Verkettungsausdrücke sind zulässig. | Zeichenfolge | Ja | – | 
| overwrite | Wenn diese Option aktiviert ist, werden alle vorhandenen Dateien auf dem lokalen System mit der heruntergeladenen Datei oder Ressource überschrieben. Wenn diese Option nicht aktiviert ist, werden alle vorhandenen Dateien auf dem lokalen System nicht überschrieben, und das Aktionsmodul schlägt mit einem Fehler fehl. Wenn Überschreiben aktiviert ist und Prüfsumme und Algorithmus angegeben sind, lädt das Aktionsmodul die Datei nur herunter, wenn die Prüfsumme und der Hash aller bereits vorhandenen Dateien nicht übereinstimmen.  | Boolesch | Nein | true | 
| checksum | Wenn Sie die Prüfsumme angeben, wird sie mit dem Hash der heruntergeladenen Datei verglichen, der mit dem mitgelieferten Algorithmus generiert wurde. Damit die Dateiüberprüfung aktiviert werden kann, müssen sowohl die Prüfsumme als auch der Algorithmus angegeben werden. Verkettungsausdrücke sind zulässig.  | Zeichenfolge | Nein | – | 
| algorithm | Der zur Berechnung der Prüfsumme verwendete Algorithmus. Die Optionen sindMD5, SHA1 SHA256, und SHA512. Damit die Dateiüberprüfung aktiviert werden kann, müssen sowohl die Prüfsumme als auch der Algorithmus angegeben werden. Verkettungsausdrücke sind zulässig.  | Zeichenfolge | Nein | – | 
| ignoreCertificateErrors | Die SSL-Zertifikatsvalidierung wird ignoriert, wenn sie aktiviert ist. | Boolesch | Nein | false | 


**Ausgabe**  

| Tastenname | Description | Typ | 
| --- | --- | --- | 
| destination | Zeichenfolge mit Zeilenumbruch, die durch Zeichen getrennt ist und den Zielpfad angibt, in dem die heruntergeladenen Dateien oder Ressourcen gespeichert werden. | Zeichenfolge | 

**Eingabebeispiel: Laden Sie die Remote-Datei in ein lokales Ziel herunter**

```
  - name: DownloadRemoteFile
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\testfolder\package.zip
```

**Ausgabe:**

```
{
	"destination": "C:\\testfolder\\package.zip"
}
```

**Eingabebeispiel: Laden Sie mehr als eine Remote-Datei an mehr als ein lokales Ziel herunter**

```
  - name: DownloadRemoteFiles
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/java14_renamed.zip
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/create_new_folder_and_add_java14_as_zip/
```

**Ausgabe:**

```
{
	"destination": "/tmp/create_new_folder/java14_renamed.zip\n/tmp/create_new_folder_and_add_java14_as_zip/java14.zip"
}
```

**Eingabebeispiel: Laden Sie eine Remote-Datei herunter, ohne das lokale Ziel zu überschreiben, und laden Sie eine weitere Remote-Datei mit Dateiüberprüfung herunter**

```
  - name: DownloadRemoteMultipleProperties
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder\java14_renamed.zip
        overwrite: false
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder_and_add_java14_as_zip\
        checksum: ac68bbf921d953d1cfab916cb6120864
        algorithm: MD5
        overwrite: true
```

**Ausgabe:**

```
{
	"destination": "C:\\create_new_folder\\java14_renamed.zip\nC:\\create_new_folder_and_add_java14_as_zip\\java14.zip"
}
```

**Eingabebeispiel: Remote-Datei herunterladen und SSL-Zertifizierungsvalidierung ignorieren**

```
  - name: DownloadRemoteIgnoreValidation
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://www.bad-ssl.com/resource
        destination: /tmp/downloads/
        ignoreCertificateErrors: true
```

**Ausgabe:**

```
{
	"destination": "/tmp/downloads/resource"
}
```

## Module für den Betrieb des Dateisystems
<a name="action-modules-file-system-operations"></a>

Der folgende Abschnitt enthält Einzelheiten zu Aktionsmodulen, die Dateisystemoperationen ausführen.

**Topics**
+ [AppendFile (Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile (Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder (Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile (Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder (Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink (Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile (Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder (Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles (Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile (Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder (Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile (Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding (Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner (Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner (Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions (Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions (Linux, Windows, macOS)](#action-modules-setfolderpermissions)

### AppendFile (Linux, Windows, macOS)
<a name="action-modules-appendfile"></a>

Das **AppendFile**Aktionsmodul fügt dem bereits vorhandenen Inhalt einer Datei den angegebenen Inhalt hinzu.

Wenn sich der Dateicodierungswert vom Standardwert encoding (`utf-8`) unterscheidet, können Sie den Dateicodierungswert mithilfe der `encoding` Option angeben. Standardmäßig wird davon ausgegangen, `utf-16` dass `utf-32` sie die Little-Endian-Kodierung verwenden. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Die angegebene Datei ist zur Laufzeit nicht vorhanden.
+ Sie haben keine Schreibberechtigungen, um den Dateiinhalt zu ändern.
+ Das Modul stößt während des Dateivorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| content | Der Inhalt, der an die Datei angehängt werden soll. | Zeichenfolge | Nein | Leere Zeichenfolge | – | Ja | 
| encoding | Der Kodierungsstandard. | Zeichenfolge | Nein | utf8 | utf8,utf-8,utf16,utf-16,utf16-LE, utf-16-LEutf16-BE,utf-16-BE,utf32,utf-32,utf32-LE,utf-32-LE,utf32-BE, und utf-32-BE. Der Wert der Kodierungsoption unterscheidet nicht zwischen Groß- und Kleinschreibung. | Ja | 

**Eingabebeispiel: Datei ohne Kodierung anhängen (Linux)**

```
  - name: AppendingFileWithOutEncodingLinux
    action: AppendFile
    inputs:
      - path: ./Sample.txt
        content: "The string to be appended to the file"
```

**Eingabebeispiel: Datei ohne Kodierung anhängen (Windows)**

```
  - name: AppendingFileWithOutEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolder\MyFile.txt
        content: "The string to be appended to the file"
```

**Eingabebeispiel: Datei mit Kodierung anhängen (Linux)**

```
  - name: AppendingFileWithEncodingLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**Eingabebeispiel: Datei mit Kodierung anhängen (Windows)**

```
  - name: AppendingFileWithEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**Eingabebeispiel: Datei mit leerer Zeichenfolge anhängen (Linux)**

```
  - name: AppendingEmptyStringLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
```

**Eingabebeispiel: Datei mit leerer Zeichenfolge anhängen (Windows)**

```
  - name: AppendingEmptyStringWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
```

**Ausgabe**  
Keine.

### CopyFile (Linux, Windows, macOS)
<a name="action-modules-copyfile"></a>

Das **CopyFile**Aktionsmodul kopiert Dateien von der angegebenen Quelle zum angegebenen Ziel. Standardmäßig erstellt das Modul den Zielordner rekursiv, wenn er zur Laufzeit nicht vorhanden ist.

Wenn eine Datei mit dem angegebenen Namen bereits im angegebenen Ordner vorhanden ist, überschreibt das Aktionsmodul standardmäßig die vorhandene Datei. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits eine Datei mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück. Diese Option funktioniert genauso wie der `cp` Befehl unter Linux, der standardmäßig überschreibt.

Der Name der Quelldatei kann einen Platzhalter () `*` enthalten. Platzhalterzeichen werden nur nach dem letzten Dateipfad-Trennzeichen (`/`oder`\`) akzeptiert. Wenn der Quelldateiname Platzhalterzeichen enthält, werden alle Dateien, die dem Platzhalter entsprechen, in den Zielordner kopiert. Wenn Sie mehr als eine Datei mithilfe eines Platzhalterzeichens verschieben möchten, muss die Eingabe für die `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden, das angibt, dass es sich bei der Zieleingabe um einen Ordner handelt.

Wenn sich der Zieldateiname vom Quelldateinamen unterscheidet, können Sie den Zieldateinamen mithilfe der `destination` Option angeben. Wenn Sie keinen Zieldateinamen angeben, wird der Name der Quelldatei verwendet, um die Zieldatei zu erstellen. Jeder Text, der auf das letzte Dateipfadtrennzeichen (`/`oder`\`) folgt, wird als Dateiname behandelt. Wenn Sie denselben Dateinamen wie die Quelldatei verwenden möchten, muss die Eingabe der `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, eine Datei im angegebenen Ordner zu erstellen.
+ Die Quelldateien sind zur Laufzeit nicht vorhanden.
+ Es gibt bereits einen Ordner mit dem angegebenen Dateinamen und die `overwrite` Option ist auf eingestellt`false`.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | Der Pfad der Quelldatei. | Zeichenfolge | Ja | – | – | Ja | 
| destination | Der Zieldateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| overwrite | Wenn der Wert auf false gesetzt ist, werden die Zieldateien nicht ersetzt, wenn sich am angegebenen Speicherort bereits eine Datei mit dem angegebenen Namen befindet. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Eine Datei kopieren (Linux)**

```
  - name: CopyingAFileLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**Eingabebeispiel: Eine Datei kopieren (Windows)**

```
  - name: CopyingAFileWindows
    action: CopyFile
    inputs:
      - source: C:\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**Eingabebeispiel: Kopiert eine Datei unter Verwendung des Quelldateinamens (Linux)**

```
  - name: CopyingFileWithSourceFileNameLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**Eingabebeispiel: Kopieren Sie eine Datei unter Verwendung des Quelldateinamens (Windows)**

```
  - name: CopyingFileWithSourceFileNameWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\
```

**Eingabebeispiel: Kopiert eine Datei mit dem Platzhalterzeichen (Linux)**

```
  - name: CopyingFilesWithWildCardLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Eingabebeispiel: Kopiert eine Datei mit dem Platzhalterzeichen (Windows)**

```
  - name: CopyingFilesWithWildCardWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Eingabebeispiel: Eine Datei kopieren, ohne sie zu überschreiben (Linux)**

```
  - name: CopyingFilesWithoutOverwriteLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**Eingabebeispiel: Eine Datei kopieren, ohne sie zu überschreiben (Windows)**

```
  - name: CopyingFilesWithoutOverwriteWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**Ausgabe**  
Keine.

### CopyFolder (Linux, Windows, macOS)
<a name="action-modules-copyfolder"></a>

Das **CopyFolder**Aktionsmodul kopiert einen Ordner von der angegebenen Quelle zum angegebenen Ziel. Die Eingabe für die `source` Option ist der zu kopierende Ordner, und die Eingabe für die `destination` Option ist der Ordner, in den der Inhalt des Quellordners kopiert wird. Standardmäßig erstellt das Modul den Zielordner rekursiv, wenn er zur Laufzeit nicht vorhanden ist.

Wenn im angegebenen Ordner bereits ein Ordner mit dem angegebenen Namen vorhanden ist, überschreibt das Aktionsmodul standardmäßig den vorhandenen Ordner. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits ein Ordner mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück.

Der Name des Quellordners kann einen Platzhalter () `*` enthalten. Platzhalterzeichen werden nur nach dem letzten Dateipfad-Trennzeichen (`/`oder`\`) akzeptiert. Wenn Platzhalterzeichen im Quellordnernamen enthalten sind, werden alle Ordner, die dem Platzhalter entsprechen, in den Zielordner kopiert. Wenn Sie mehr als einen Ordner mithilfe eines Platzhalterzeichens kopieren möchten, muss die Eingabe für die `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden, was darauf hinweist, dass es sich bei der Zieleingabe um einen Ordner handelt.

Wenn sich der Name des Zielordners vom Namen des Quellordners unterscheidet, können Sie den Namen des Zielordners mithilfe der `destination` Option angeben. Wenn Sie keinen Zielordnernamen angeben, wird der Name des Quellordners verwendet, um den Zielordner zu erstellen. Jeder Text, der auf das letzte Dateipfadtrennzeichen (`/`oder`\`) folgt, wird als Ordnername behandelt. Wenn Sie denselben Ordnernamen wie den Quellordner verwenden möchten, muss die Eingabe der `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, einen Ordner im angegebenen Ordner zu erstellen.
+ Die Quellordner sind zur Laufzeit nicht vorhanden.
+ Es gibt bereits einen Ordner mit dem angegebenen Ordnernamen und die `overwrite` Option ist auf gesetzt`false`.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | Der Pfad des Quellordners. | Zeichenfolge | Ja | – | – | Ja | 
| destination | Der Pfad des Zielordners. | Zeichenfolge | Ja | – | – | Ja | 
| overwrite | Wenn der Wert auf False gesetzt ist, werden die Zielordner nicht ersetzt, wenn sich am angegebenen Speicherort bereits ein Ordner mit dem angegebenen Namen befindet. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Einen Ordner kopieren (Linux)**

```
  - name: CopyingAFolderLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/destinationFolder
```

**Eingabebeispiel: Einen Ordner kopieren (Windows)**

```
  - name: CopyingAFolderWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
```

**Eingabebeispiel: Kopieren Sie einen Ordner unter Verwendung des Quellordnernamens (Linux)**

```
  - name: CopyingFolderSourceFolderNameLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/
```

**Eingabebeispiel: Kopieren Sie einen Ordner unter Verwendung des Quellordnernamens (Windows)**

```
  - name: CopyingFolderSourceFolderNameWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**Eingabebeispiel: Kopieren Sie einen Ordner mit dem Platzhalterzeichen (Linux)**

```
  - name: CopyingFoldersWithWildCardLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Eingabebeispiel: Kopieren Sie einen Ordner mit dem Platzhalterzeichen (Windows)**

```
  - name: CopyingFoldersWithWildCardWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Eingabebeispiel: Einen Ordner kopieren, ohne ihn zu überschreiben (Linux)**

```
  - name: CopyingFoldersWithoutOverwriteLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
        overwrite: false
```

**Eingabebeispiel: Einen Ordner kopieren, ohne ihn zu überschreiben (Windows)**

```
  - name: CopyingFoldersWithoutOverwrite
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**Ausgabe**  
Keine.

### CreateFile (Linux, Windows, macOS)
<a name="action-modules-createfile"></a>

Das **CreateFile**Aktionsmodul erstellt eine Datei an einem bestimmten Ort. Standardmäßig erstellt das Modul bei Bedarf auch rekursiv die übergeordneten Ordner.

Wenn die Datei bereits im angegebenen Ordner vorhanden ist, kürzt oder überschreibt das Aktionsmodul standardmäßig die vorhandene Datei. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits eine Datei mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück.

Wenn sich der Wert für die Dateikodierung vom Standardwert für die Kodierung (`utf-8`) unterscheidet, können Sie den Wert für die Dateikodierung mithilfe der `encoding` Option angeben. Standardmäßig wird davon ausgegangen, `utf-16` dass `utf-32` sie die Little-Endian-Kodierung verwenden. 

`owner`, und sind `group` optionale Eingaben. `permissions` Die Eingabe für `permissions` muss ein Zeichenkettenwert sein. Dateien werden mit Standardwerten erstellt, wenn sie nicht angegeben werden. Diese Optionen werden auf Windows-Plattformen nicht unterstützt. Dieses Aktionsmodul validiert und gibt einen Fehler zurück, wenn die `permissions` Optionen `owner``group`, und auf Windows-Plattformen verwendet werden.

Dieses Aktionsmodul kann eine Datei mit Berechtigungen erstellen, die durch den `umask` Standardwert des Betriebssystems definiert sind. Sie müssen den `umask` Wert festlegen, wenn Sie den Standardwert überschreiben möchten.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, eine Datei oder einen Ordner im angegebenen übergeordneten Ordner zu erstellen.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| content | Der Textinhalt der Datei. | Zeichenfolge | Nein | – | – | Ja | 
| encoding | Der Kodierungsstandard. | Zeichenfolge | Nein | utf8 | utf8,utf-8,utf16,utf-16,utf16-LE, utf-16-LEutf16-BE,utf-16-BE,utf32,utf-32,utf32-LE,utf-32-LE,utf32-BE, und utf-32-BE. Der Wert der Kodierungsoption unterscheidet nicht zwischen Groß- und Kleinschreibung. | Ja | 
| owner | Der Benutzername oder die ID. | Zeichenfolge | Nein | – | – | Wird unter Windows nicht unterstützt. | 
| group | Der Gruppenname oder die ID. | Zeichenfolge | Nein | Der aktuelle Benutzer. | – | Wird unter Windows nicht unterstützt. | 
| permissions | Die Dateiberechtigungen. | Zeichenfolge | Nein | 0666 | – | Wird unter Windows nicht unterstützt. | 
| overwrite | Wenn der Name der angegebenen Datei bereits existiert, wird durch das Einstellen dieses Werts auf false verhindert, dass die Datei standardmäßig gekürzt oder überschrieben wird. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Eine Datei ohne Überschreiben erstellen (Linux)**

```
  - name: CreatingFileWithoutOverwriteLinux
    action: CreateFile
    inputs:
      - path: /home/UserName/Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**Eingabebeispiel: Erstellen Sie eine Datei ohne Überschreiben (Windows)**

```
  - name: CreatingFileWithoutOverwriteWindows
    action: CreateFile
    inputs:
      - path: C:\Temp\Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**Eingabebeispiel: Erstellen Sie eine Datei mit Dateieigenschaften**

```
  - name: CreatingFileWithFileProperties
    action: CreateFile
    inputs:
      - path: SampleFolder/Sample.txt
        content: The text content of the sample file.
        encoding: UTF-16
        owner: Ubuntu
        group: UbuntuGroup
        permissions: 0777
     - path: SampleFolder/SampleFile.txt
        permissions: 755
      - path: SampleFolder/TextFile.txt
        encoding: UTF-16
        owner: root
        group: rootUserGroup
```

**Eingabebeispiel: Erstellen Sie eine Datei ohne Dateieigenschaften**

```
  - name: CreatingFileWithoutFileProperties
    action: CreateFile
    inputs:
      - path: ./Sample.txt
      - path: Sample1.txt
```

**Eingabebeispiel: Erstellen Sie eine leere Datei, um einen Abschnitt im Linux-Bereinigungsskript zu überspringen**

```
  - name: CreateSkipCleanupfile
    action: CreateFile
    inputs:
      - path: <skip section file name>
```

Weitere Informationen finden Sie unter [Überschreiben Sie das Linux-Bereinigungsskript](security-best-practices.md#override-linux-cleanup-script).

**Ausgabe**  
Keine.

### CreateFolder (Linux, Windows, macOS)
<a name="action-modules-createfolder"></a>

Das **CreateFolder**Aktionsmodul erstellt einen Ordner an einem bestimmten Ort. Standardmäßig erstellt das Modul bei Bedarf auch rekursiv die übergeordneten Ordner.

Wenn der Ordner bereits im angegebenen Ordner vorhanden ist, kürzt oder überschreibt das Aktionsmodul standardmäßig den vorhandenen Ordner. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits ein Ordner mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück.

`owner``group`, und `permissions` sind optionale Eingaben. Die Eingabe für `permissions` muss ein Zeichenkettenwert sein. Diese Optionen werden auf Windows-Plattformen nicht unterstützt. Dieses Aktionsmodul validiert und gibt einen Fehler zurück, wenn die `permissions` Optionen `owner``group`, und auf Windows-Plattformen verwendet werden.

Dieses Aktionsmodul kann einen Ordner mit Berechtigungen erstellen, die durch den `umask` Standardwert des Betriebssystems definiert sind. Sie müssen den `umask` Wert festlegen, wenn Sie den Standardwert überschreiben möchten.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, einen Ordner am angegebenen Speicherort zu erstellen.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Ordnerpfad. | Zeichenfolge | Ja | – | – | Ja | 
| owner | Der Benutzername oder die ID. | Zeichenfolge | Nein | Der aktuelle Benutzer. | – | Wird unter Windows nicht unterstützt. | 
| group | Der Gruppenname oder die ID. | Zeichenfolge | Nein | Die Gruppe des aktuellen Benutzers. | – | Wird unter Windows nicht unterstützt. | 
| permissions | Die Ordnerberechtigungen. | Zeichenfolge | Nein | 0777 | – | Wird unter Windows nicht unterstützt. | 
| overwrite | Wenn der Name der angegebenen Datei bereits existiert, wird durch das Einstellen dieses Werts auf false verhindert, dass die Datei standardmäßig gekürzt oder überschrieben wird. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Erstellen Sie einen Ordner (Linux)**

```
  - name: CreatingFolderLinux
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/
```

**Eingabebeispiel: Erstellen Sie einen Ordner (Windows)**

```
  - name: CreatingFolderWindows
    action: CreateFolder
    inputs:
      - path: C:\MyFolder
```

**Eingabebeispiel: Erstellen Sie einen Ordner, in dem die Ordnereigenschaften angegeben sind**

```
  - name: CreatingFolderWithFolderProperties
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        owner: SampleOwnerName
        group: SampleGroupName
        permissions: 0777
      - path: /Sample/MyFolder/SampleFoler/
        permissions: 777
```

**Eingabebeispiel: Erstellen Sie einen Ordner, der den vorhandenen Ordner überschreibt, falls es einen gibt.**

```
  - name: CreatingFolderWithOverwrite
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        overwrite: true
```

**Ausgabe**  
Keine.

### CreateSymlink (Linux, Windows, macOS)
<a name="action-modules-createsymlink"></a>

Das **CreateSymlink**Aktionsmodul erstellt symbolische Links oder Dateien, die einen Verweis auf eine andere Datei enthalten. Dieses Modul wird auf Windows-Plattformen nicht unterstützt. 

Die Eingabe für die `target` Optionen `path` und kann entweder ein absoluter oder ein relativer Pfad sein. Handelt es sich bei der Eingabe für die `path` Option um einen relativen Pfad, wird dieser bei der Erstellung des Links durch den absoluten Pfad ersetzt.

Wenn ein Link mit dem angegebenen Namen bereits im angegebenen Ordner vorhanden ist, gibt das Aktionsmodul standardmäßig einen Fehler zurück. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die `force` Option auf setzen`true`. Wenn die `force` Option auf gesetzt ist`true`, überschreibt das Modul den vorhandenen Link.

Wenn kein übergeordneter Ordner vorhanden ist, erstellt das Aktionsmodul den Ordner standardmäßig rekursiv.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Die Zieldatei ist zur Laufzeit nicht vorhanden.
+ Eine nichtsymbolische Linkdatei mit dem angegebenen Namen ist bereits vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| target | Der Zieldateipfad, auf den der symbolische Link verweist. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| force | Erzwingt die Erstellung eines Links, wenn bereits ein Link mit demselben Namen vorhanden ist. | Boolesch | Nein | false | – | Wird unter Windows nicht unterstützt. | 

**Eingabebeispiel: Erstellen Sie einen symbolischen Link, der die Erstellung eines Links erzwingt**

```
  - name: CreatingSymbolicLinkWithForce
    action: CreateSymlink
    inputs:
      - path: /Folder2/Symboliclink.txt
        target: /Folder/Sample.txt
        force: true
```

**Eingabebeispiel: Erstellen Sie einen symbolischen Link, der die Erstellung eines Links nicht erzwingt**

```
  - name: CreatingSymbolicLinkWithOutForce
    action: CreateSymlink
    inputs:
      - path: Symboliclink.txt
        target: /Folder/Sample.txt
```

**Ausgabe**  
Keine.

### DeleteFile (Linux, Windows, macOS)
<a name="action-modules-deletefile"></a>

Das **DeleteFile**Aktionsmodul löscht eine oder mehrere Dateien an einem bestimmten Ort.

Die Eingabe von `path` sollte ein gültiger Dateipfad oder ein Dateipfad mit einem Platzhalterzeichen (`*`) im Dateinamen sein. Wenn Platzhalterzeichen im Dateinamen angegeben werden, werden alle Dateien innerhalb desselben Ordners, die dem Platzhalter entsprechen, gelöscht. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, Löschvorgänge durchzuführen.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Ja | 

**Eingabebeispiel: Eine einzelne Datei löschen (Linux)**

```
  - name: DeletingSingleFileLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/Sample.txt
```

**Eingabebeispiel: Eine einzelne Datei löschen (Windows)**

```
  - name: DeletingSingleFileWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\Sample.txt
```

**Eingabebeispiel: Lösche eine Datei, die mit „log“ endet (Linux)**

```
  - name: DeletingFileEndingWithLogLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*log
```

**Eingabebeispiel: Lösche eine Datei, die mit „log“ endet (Windows)**

```
  - name: DeletingFileEndingWithLogWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*log
```

**Eingabebeispiel: lösche alle Dateien in einem angegebenen Ordner (Linux)**

```
  - name: DeletingAllFilesInAFolderLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*
```

**Eingabebeispiel: lösche alle Dateien in einem angegebenen Ordner (Windows)**

```
  - name: DeletingAllFilesInAFolderWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*
```

**Ausgabe**  
Keine.

### DeleteFolder (Linux, Windows, macOS)
<a name="action-modules-deletefolder"></a>

Das **DeleteFolder**Aktionsmodul löscht Ordner.

Wenn der Ordner nicht leer ist, müssen Sie die `force` Option auf setzen, `true` um den Ordner und seinen Inhalt zu entfernen. Wenn Sie die `force` Option nicht auf setzen und der Ordner`true`, den Sie löschen möchten, nicht leer ist, gibt das Aktionsmodul einen Fehler zurück. Der Standardwert der `force` Option ist`false`.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, Löschvorgänge durchzuführen.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Ordnerpfad. | Zeichenfolge | Ja | – | – | Ja | 
| force | Löscht den Ordner, unabhängig davon, ob der Ordner leer ist oder nicht. | Boolesch | Nein | false | – | Ja | 

**Eingabebeispiel: Löschen Sie einen Ordner, der nicht leer ist, mit der `force` Option (Linux)** 

```
  - name: DeletingFolderWithForceOptionLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        force: true
```

**Eingabebeispiel: Löschen Sie einen Ordner, der nicht leer ist, mit der `force` Option (Windows)** 

```
  - name: DeletingFolderWithForceOptionWindows
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
        force: true
```

**Eingabebeispiel: einen Ordner löschen (Linux)** 

```
  - name: DeletingFolderWithOutForceLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
```

**Eingabebeispiel: einen Ordner löschen (Windows)** 

```
  - name: DeletingFolderWithOutForce
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
```

**Ausgabe**  
Keine.

### ListFiles (Linux, Windows, macOS)
<a name="action-modules-listfiles"></a>

Das **ListFiles**Aktionsmodul listet die Dateien in einem angegebenen Ordner auf. Wenn die Option rekursiv auf gesetzt ist`true`, listet sie die Dateien in Unterordnern auf. Dieses Modul listet standardmäßig keine Dateien in Unterordnern auf.

Um alle Dateien aufzulisten, deren Namen einem bestimmten Muster entsprechen, verwenden Sie die `fileNamePattern` Option zur Angabe des Musters. Die `fileNamePattern` Option akzeptiert den Platzhalterwert (`*`). Wenn der angegeben `fileNamePattern` ist, werden alle Dateien zurückgegeben, die dem angegebenen Dateinamenformat entsprechen. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Der angegebene Ordner ist zur Laufzeit nicht vorhanden.
+ Sie sind nicht berechtigt, eine Datei oder einen Ordner im angegebenen übergeordneten Ordner zu erstellen.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Ordnerpfad. | Zeichenfolge | Ja | – | – | Ja | 
| fileNamePattern | Das Muster, das abgeglichen werden soll, um alle Dateien aufzulisten, deren Namen dem Muster entsprechen. | Zeichenfolge | Nein | – | – | Ja | 
| recursive | Listet die Dateien im Ordner rekursiv auf. | Boolesch | Nein | false | – | Ja | 

**Eingabebeispiel: listet Dateien im angegebenen Ordner auf (Linux)**

```
  - name: ListingFilesInSampleFolderLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/Sample
```

**Eingabebeispiel: Dateien im angegebenen Ordner auflisten (Windows)**

```
  - name: ListingFilesInSampleFolderWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\Sample
```

**Eingabebeispiel: listet Dateien auf, die mit „log“ enden (Linux)**

```
  - name: ListingFilesWithEndingWithLogLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        fileNamePattern: *log
```

**Eingabebeispiel: listet Dateien auf, die mit „log“ enden (Windows)**

```
  - name: ListingFilesWithEndingWithLogWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\
        fileNamePattern: *log
```

**Eingabebeispiel: Dateien rekursiv auflisten**

```
  - name: ListingFilesRecursively
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        recursive: true
```


**Ausgabe**  

| Tastenname | Description | Typ | 
| --- | --- | --- | 
| files | Die Liste der Dateien. | Zeichenfolge | 

**Output example**

```
{
	"files": "/sample1.txt,/sample2.txt,/sample3.txt"
}
```

### MoveFile (Linux, Windows, macOS)
<a name="action-modules-movefile"></a>

Das **MoveFile**Aktionsmodul verschiebt Dateien von der angegebenen Quelle zum angegebenen Ziel.

Wenn die Datei bereits im angegebenen Ordner vorhanden ist, überschreibt das Aktionsmodul standardmäßig die vorhandene Datei. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits eine Datei mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück. Diese Option funktioniert genauso wie der `mv` Befehl unter Linux, der standardmäßig überschreibt.

Der Name der Quelldatei kann einen Platzhalter () `*` enthalten. Platzhalterzeichen werden nur nach dem letzten Dateipfad-Trennzeichen (`/`oder`\`) akzeptiert. Wenn der Quelldateiname Platzhalterzeichen enthält, werden alle Dateien, die dem Platzhalter entsprechen, in den Zielordner kopiert. Wenn Sie mehr als eine Datei mithilfe eines Platzhalterzeichens verschieben möchten, muss die Eingabe für die `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden, das angibt, dass es sich bei der Zieleingabe um einen Ordner handelt.

Wenn sich der Zieldateiname vom Quelldateinamen unterscheidet, können Sie den Zieldateinamen mithilfe der `destination` Option angeben. Wenn Sie keinen Zieldateinamen angeben, wird der Name der Quelldatei verwendet, um die Zieldatei zu erstellen. Jeder Text, der auf das letzte Dateipfadtrennzeichen (`/`oder`\`) folgt, wird als Dateiname behandelt. Wenn Sie denselben Dateinamen wie die Quelldatei verwenden möchten, muss die Eingabe der `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, eine Datei im angegebenen Ordner zu erstellen.
+ Die Quelldateien sind zur Laufzeit nicht vorhanden.
+ Es gibt bereits einen Ordner mit dem angegebenen Dateinamen und die `overwrite` Option ist auf eingestellt`false`.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | Der Pfad der Quelldatei. | Zeichenfolge | Ja | – | – | Ja | 
| destination | Der Zieldateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| overwrite | Wenn der Wert auf false gesetzt ist, werden die Zieldateien nicht ersetzt, wenn sich am angegebenen Speicherort bereits eine Datei mit dem angegebenen Namen befindet. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Eine Datei verschieben (Linux)**

```
  - name: MovingAFileLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**Eingabebeispiel: Eine Datei verschieben (Windows)**

```
  - name: MovingAFileWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**Eingabebeispiel: Verschieben Sie eine Datei unter Verwendung des Quelldateinamens (Linux)**

```
  - name: MovingFileWithSourceFileNameLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**Eingabebeispiel: Verschieben Sie eine Datei unter Verwendung des Quelldateinamens (Windows)**

```
  - name: MovingFileWithSourceFileNameWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder
```

**Eingabebeispiel: Verschieben Sie eine Datei mit einem Platzhalterzeichen (Linux)**

```
  - name: MovingFilesWithWildCardLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Eingabebeispiel: Verschieben Sie eine Datei mit einem Platzhalterzeichen (Windows)**

```
  - name: MovingFilesWithWildCardWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder
```

**Eingabebeispiel: Eine Datei verschieben, ohne sie zu überschreiben (Linux)**

```
  - name: MovingFilesWithoutOverwriteLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**Eingabebeispiel: Eine Datei verschieben, ohne sie zu überschreiben (Windows)**

```
  - name: MovingFilesWithoutOverwrite
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**Ausgabe**  
Keine.

### MoveFolder (Linux, Windows, macOS)
<a name="action-modules-movefolder"></a>

Das **MoveFolder**Aktionsmodul verschiebt Ordner von der angegebenen Quelle zum angegebenen Ziel. Die Eingabe für die `source` Option ist der Ordner, der verschoben werden soll, und die Eingabe für die `destination` Option ist der Ordner, in den der Inhalt der Quellordner verschoben wird.

Wenn der übergeordnete Zielordner oder die Eingabe für die `destination` Option zur Laufzeit nicht vorhanden sind, besteht das Standardverhalten des Moduls darin, den Ordner rekursiv am angegebenen Ziel zu erstellen.

Wenn im Zielordner bereits ein Ordner vorhanden ist, der mit dem Quellordner identisch ist, überschreibt das Aktionsmodul standardmäßig den vorhandenen Ordner. Sie können dieses Standardverhalten außer Kraft setzen, indem Sie die Option Überschreiben auf setzen. `false` Wenn die Option zum Überschreiben auf `false` gesetzt ist und sich am angegebenen Speicherort bereits ein Ordner mit dem angegebenen Namen befindet, gibt das Aktionsmodul einen Fehler zurück.

Der Name des Quellordners kann einen Platzhalter () `*` enthalten. Platzhalterzeichen werden nur nach dem letzten Dateipfad-Trennzeichen (`/`oder`\`) akzeptiert. Wenn Platzhalterzeichen im Quellordnernamen enthalten sind, werden alle Ordner, die dem Platzhalter entsprechen, in den Zielordner kopiert. Wenn Sie mehr als einen Ordner mithilfe eines Platzhalterzeichens verschieben möchten, muss die Eingabe für die `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden, was darauf hinweist, dass es sich bei der Zieleingabe um einen Ordner handelt.

Wenn sich der Name des Zielordners vom Namen des Quellordners unterscheidet, können Sie den Namen des Zielordners mithilfe der `destination` Option angeben. Wenn Sie keinen Zielordnernamen angeben, wird der Name des Quellordners verwendet, um den Zielordner zu erstellen. Jeder Text, der auf das letzte Dateipfadtrennzeichen (`/`oder`\`) folgt, wird als Ordnername behandelt. Wenn Sie denselben Ordnernamen wie den Quellordner verwenden möchten, muss die Eingabe der `destination` Option mit einem Dateipfadtrennzeichen (`/`oder`\`) enden. 

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, einen Ordner im Zielordner zu erstellen.
+ Die Quellordner sind zur Laufzeit nicht vorhanden.
+ Es gibt bereits einen Ordner mit dem angegebenen Namen und die `overwrite` Option ist auf gesetzt`false`.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | Der Pfad des Quellordners. | Zeichenfolge | Ja | – | – | Ja | 
| destination | Der Pfad des Zielordners. | Zeichenfolge | Ja | – | – | Ja | 
| overwrite | Wenn der Wert auf False gesetzt ist, werden die Zielordner nicht ersetzt, wenn sich am angegebenen Speicherort bereits ein Ordner mit dem angegebenen Namen befindet. | Boolesch | Nein | true | – | Ja | 

**Eingabebeispiel: Einen Ordner verschieben (Linux)**

```
  - name: MovingAFolderLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
```

**Eingabebeispiel: Einen Ordner verschieben (Windows)**

```
  - name: MovingAFolderWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
```

**Eingabebeispiel: Verschieben Sie einen Ordner unter Verwendung des Quellordnernamens (Linux)**

```
  - name: MovingFolderWithSourceFolderNameLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/
```

**Eingabebeispiel: Verschieben Sie einen Ordner mithilfe des Quellordnernamens (Windows)**

```
  - name: MovingFolderWithSourceFolderNameWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**Eingabebeispiel: Verschieben Sie einen Ordner mithilfe eines Platzhalterzeichens (Linux)**

```
  - name: MovingFoldersWithWildCardLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Eingabebeispiel: Verschieben Sie einen Ordner mithilfe eines Platzhalterzeichens (Windows)**

```
  - name: MovingFoldersWithWildCardWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Eingabebeispiel: Einen Ordner verschieben, ohne ihn zu überschreiben (Linux)**

```
  - name: MovingFoldersWithoutOverwriteLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
    destination: /MyFolder/destinationFolder
    overwrite: false
```

**Eingabebeispiel: Einen Ordner verschieben, ohne ihn zu überschreiben (Windows)**

```
  - name: MovingFoldersWithoutOverwriteWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**Ausgabe**  
Keine.

### ReadFile (Linux, Windows, macOS)
<a name="action-modules-readfile"></a>

Das **ReadFile**Aktionsmodul liest den Inhalt einer Textdatei vom Typ Zeichenfolge. Dieses Modul kann verwendet werden, um den Inhalt einer Datei zur Verwendung in nachfolgenden Schritten durch Verkettung oder zum Lesen von Daten in die `console.log` Datei zu lesen. Wenn der angegebene Pfad ein symbolischer Link ist, gibt dieses Modul den Inhalt der Zieldatei zurück. Dieses Modul unterstützt nur Textdateien.

Wenn sich der Dateicodierungswert vom Standardwert encoding (`utf-8`) unterscheidet, können Sie den Dateicodierungswert mithilfe der `encoding` Option angeben. Standardmäßig wird davon ausgegangen, `utf-16` dass `utf-32` sie die Little-Endian-Kodierung verwenden. 

Standardmäßig kann dieses Modul den Dateiinhalt nicht in die Datei drucken. `console.log` Sie können diese Einstellung überschreiben, indem Sie die `printFileContent` Eigenschaft auf setzen`true`.

Dieses Modul kann nur den Inhalt einer Datei zurückgeben. Es kann keine Dateien wie Excel- oder JSON-Dateien analysieren.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Die Datei ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| encoding | Der Kodierungsstandard. | Zeichenfolge | Nein | utf8 | utf8,utf-8,utf16,utf-16,utf16-LE, utf-16-LEutf16-BE,utf-16-BE,utf32,utf-32,utf32-LE,utf-32-LE,utf32-BE, und utf-32-BE. Der Wert der Kodierungsoption unterscheidet nicht zwischen Groß- und Kleinschreibung. | Ja | 
| printFileContent | Druckt den Dateiinhalt in die console.log Datei. | Boolesch | Nein | false | – | Ja. | 

**Eingabebeispiel: Eine Datei lesen (Linux)**

```
  - name: ReadingFileLinux
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
```

**Eingabebeispiel: eine Datei lesen (Windows)**

```
  - name: ReadingFileWindows
    action: ReadFile
    inputs:
      - path: C:\Windows\WindowsUpdate.log
```

**Eingabebeispiel: Eine Datei lesen und den Kodierungsstandard angeben**

```
  - name: ReadingFileWithFileEncoding
    action: ReadFile
    inputs:
      - path: /FolderName/SampleFile.txt
        encoding: UTF-32
```

**Eingabebeispiel: Eine Datei lesen und in die `console.log` Datei drucken**

```
  - name: ReadingFileToConsole
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
        printFileContent: true
```


**Ausgabe**  

| Feld | Description | Typ | 
| --- | --- | --- | 
| content | Der Inhalt der Datei. | Zeichenfolge | 

**Output example**

```
{
	"content" : "The file content"
}
```

### SetFileEncoding (Linux, Windows, macOS)
<a name="action-modules-setfileencoding"></a>

Das **SetFileEncoding**Aktionsmodul ändert die Kodierungseigenschaft einer vorhandenen Datei. Dieses Modul kann die Dateikodierung von `utf-8` zu einem bestimmten Kodierungsstandard konvertieren. Standardmäßig wird davon ausgegangen, `utf-16` dass `utf-32` es sich um Little-Endian-Kodierung handelt.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, die angegebene Änderung durchzuführen.
+ Die Datei ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Ja | 
| encoding | Der Kodierungsstandard. | Zeichenfolge | Nein | utf8 | utf8,utf-8,utf16,utf-16,utf16-LE, utf-16-LEutf16-BE,utf-16-BE,utf32,utf-32,utf32-LE,utf-32-LE,utf32-BE, und utf-32-BE. Der Wert der Kodierungsoption unterscheidet nicht zwischen Groß- und Kleinschreibung. | Ja | 

**Eingabebeispiel: Legen Sie die Eigenschaft zur Dateikodierung fest**

```
  - name: SettingFileEncodingProperty
    action: SetFileEncoding
    inputs:
      - path: /home/UserName/SampleFile.txt
        encoding: UTF-16
```

**Ausgabe**  
Keine.

### SetFileOwner (Linux, Windows, macOS)
<a name="action-modules-setfileowner"></a>

Das **SetFileOwner**Aktionsmodul ändert die Eigenschaften `owner` und `group` Eigentümer einer vorhandenen Datei. Wenn es sich bei der angegebenen Datei um einen symbolischen Link handelt, ändert das Modul die `owner` Eigenschaft der Quelldatei. Dieses Modul wird auf Windows-Plattformen nicht unterstützt. 

Dieses Modul akzeptiert Benutzer- und Gruppennamen als Eingaben. Wenn der Gruppenname nicht angegeben wird, weist das Modul den Gruppeneigentümer der Datei der Gruppe zu, zu der der Benutzer gehört.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, die angegebene Änderung durchzuführen.
+ Der angegebene Benutzer- oder Gruppenname ist zur Laufzeit nicht vorhanden.
+ Die Datei ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| owner | Der Benutzername | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| group | Der Name der Benutzergruppe. | Zeichenfolge | Nein | Der Name der Gruppe, zu der der Benutzer gehört. | – | Wird unter Windows nicht unterstützt. | 

**Eingabebeispiel: Legen Sie die Eigenschaft des Dateibesitzers fest, ohne den Namen der Benutzergruppe anzugeben**

```
  - name: SettingFileOwnerPropertyNoGroup
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
```

**Eingabebeispiel: Legen Sie die Eigenschaft des Dateibesitzers fest, indem Sie den Eigentümer und die Benutzergruppe angeben**

```
  - name: SettingFileOwnerProperty
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
        group: LinuxUserGroup
```

**Ausgabe**  
Keine.

### SetFolderOwner (Linux, Windows, macOS)
<a name="action-modules-setfolderowner"></a>

Das **SetFolderOwner**Aktionsmodul ändert rekursiv die Eigenschaften `owner` und `group` Eigentümer eines vorhandenen Ordners. Standardmäßig kann das Modul die Eigentümerschaft für den gesamten Inhalt eines Ordners ändern. Sie können die `recursive` Option auf setzen, `false` um dieses Verhalten zu überschreiben. Dieses Modul wird auf Windows-Plattformen nicht unterstützt. 

Dieses Modul akzeptiert Benutzer- und Gruppennamen als Eingaben. Wenn der Gruppenname nicht angegeben wird, weist das Modul den Gruppeneigentümer der Datei der Gruppe zu, zu der der Benutzer gehört.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, die angegebene Änderung durchzuführen.
+ Der angegebene Benutzer- oder Gruppenname ist zur Laufzeit nicht vorhanden.
+ Der Ordner ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Ordnerpfad. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| owner | Der Benutzername | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| group | Der Name der Benutzergruppe. | Zeichenfolge | Nein | Der Name der Gruppe, zu der der Benutzer gehört. | – | Wird unter Windows nicht unterstützt. | 
| recursive | Setzt das Standardverhalten beim Ändern der Eigentümerschaft für den gesamten Inhalt eines Ordners außer Kraft, wenn diese Einstellung auf false gesetzt ist. | Boolesch | Nein | true | – | Wird unter Windows nicht unterstützt. | 

**Eingabebeispiel: Legen Sie die Eigenschaft des Ordnerbesitzers fest, ohne den Namen der Benutzergruppe anzugeben**

```
  - name: SettingFolderPropertyWithOutGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
```

**Eingabebeispiel: Legen Sie die Eigenschaft des Ordnerbesitzers fest, ohne die Eigentümerschaft aller Inhalte in einem Ordner zu überschreiben**

```
  - name: SettingFolderPropertyWithOutRecursively
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        recursive: false
```

**Eingabebeispiel: Legen Sie die Eigenschaft „Dateibesitz“ fest, indem Sie den Namen der Benutzergruppe angeben**

```
  - name: SettingFolderPropertyWithGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        group: LinuxUserGroup
```

**Ausgabe**  
Keine.

### SetFilePermissions (Linux, Windows, macOS)
<a name="action-modules-setfilepermissions"></a>

Das **SetFilePermissions**Aktionsmodul ändert die `permissions` einer vorhandenen Datei. Dieses Modul wird auf Windows-Plattformen nicht unterstützt. 

Die Eingabe für `permissions` muss ein Zeichenkettenwert sein.

Dieses Aktionsmodul kann eine Datei mit Berechtigungen erstellen, die durch den Standard-Umask-Wert des Betriebssystems definiert sind. Sie müssen den `umask` Wert festlegen, wenn Sie den Standardwert überschreiben möchten.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, die angegebene Änderung durchzuführen.
+ Die Datei ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Dateipfad. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| permissions | Die Dateiberechtigungen. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 

**Eingabebeispiel: Dateiberechtigungen ändern**

```
  - name: ModifyingFilePermissions
    action: SetFilePermissions
    inputs:
      - path: /home/UserName/SampleFile.txt
        permissions: 766
```

**Ausgabe**  
Keine.

### SetFolderPermissions (Linux, Windows, macOS)
<a name="action-modules-setfolderpermissions"></a>

Das **SetFolderPermissions**Aktionsmodul ändert rekursiv den `permissions` eines vorhandenen Ordners und all seiner Unterdateien und Unterordner. Standardmäßig kann dieses Modul die Berechtigungen für den gesamten Inhalt des angegebenen Ordners ändern. Sie können die `recursive` Option auf setzen, `false` um dieses Verhalten zu überschreiben. Dieses Modul wird auf Windows-Plattformen nicht unterstützt. 

Die Eingabe für `permissions` muss ein Zeichenkettenwert sein. 

Dieses Aktionsmodul kann Berechtigungen entsprechend dem Standard-Umask-Wert des Betriebssystems ändern. Sie müssen den `umask` Wert festlegen, wenn Sie den Standardwert überschreiben möchten.

Das Aktionsmodul gibt einen Fehler zurück, wenn Folgendes eintritt:
+ Sie sind nicht berechtigt, die angegebene Änderung durchzuführen.
+ Der Ordner ist zur Laufzeit nicht vorhanden.
+ Das Aktionsmodul stößt bei der Ausführung des Vorgangs auf einen Fehler.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | Wird auf allen Plattformen unterstützt | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | Der Ordnerpfad. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| permissions | Die Ordnerberechtigungen. | Zeichenfolge | Ja | – | – | Wird unter Windows nicht unterstützt. | 
| recursive | Setzt das Standardverhalten beim Ändern von Berechtigungen für den gesamten Inhalt eines Ordners außer Kraft, wenn diese Einstellung auf false gesetzt ist. | Boolesch | Nein | true | – | Wird unter Windows nicht unterstützt. | 

**Eingabebeispiel: Ordnerberechtigungen festlegen**

```
  - name: SettingFolderPermissions
    action: SetFolderPermissions
    inputs:
      - path: SampleFolder/
        permissions: 0777
```

**Eingabebeispiel: Ordnerberechtigungen festlegen, ohne die Berechtigungen für den gesamten Inhalt eines Ordners zu ändern**

```
  - name: SettingFolderPermissionsNoRecursive
    action: SetFolderPermissions
    inputs:
      - path: /home/UserName/SampleFolder/
        permissions: 777
        recursive: false
```

**Ausgabe**  
Keine.

## Aktionen zur Softwareinstallation
<a name="action-modules-software-install-actions"></a>

Im folgenden Abschnitt werden Aktionsmodule beschrieben, mit denen Software installiert oder deinstalliert wird.

**IAM-Anforderungen**  
Wenn es sich bei Ihrem Installations-Download-Pfad um einen S3-URI handelt, muss die IAM-Rolle, die Sie Ihrem Instanzprofil zuordnen, über die Berechtigung zum Ausführen des `S3Download` Aktionsmoduls verfügen. Um die erforderliche Berechtigung zu erteilen, fügen Sie die `S3:GetObject` IAM-Richtlinie der IAM-Rolle bei, die Ihrem Instance-Profil zugeordnet ist, und geben Sie den Pfad für Ihren Bucket an. Beispiel, `arn:aws:s3:::BucketName/*`).

**Komplexe MSI-Eingaben**  
Wenn Ihre Eingabezeichenfolgen doppelte Anführungszeichen (`"`) enthalten, müssen Sie eine der folgenden Methoden verwenden, um sicherzustellen, dass sie korrekt interpretiert werden:
+ Sie können einfache Anführungszeichen (') außerhalb Ihrer Zeichenfolge verwenden, um sie zu enthalten, und doppelte Anführungszeichen („) innerhalb Ihrer Zeichenfolge verwenden, wie im folgenden Beispiel gezeigt.

  ```
  properties:
    COMPANYNAME: '"Acme ""Widgets"" and ""Gizmos."""'
  ```

  Wenn Sie in diesem Fall einen Apostroph innerhalb Ihrer Zeichenfolge verwenden müssen, müssen Sie ihn maskieren. Das bedeutet, vor dem Apostroph ein weiteres einfaches Anführungszeichen (') zu verwenden.
+ Sie können doppelte Anführungszeichen („) an der Außenseite Ihrer Zeichenfolge verwenden, um sie zu enthalten. Und Sie können alle doppelten Anführungszeichen innerhalb Ihrer Zeichenfolge maskieren, indem Sie den umgekehrten Schrägstrich (`\`) verwenden, wie im folgenden Beispiel gezeigt.

  ```
  properties:
    COMPANYNAME: "\"Acme \"\"Widgets\"\" and \"\"Gizmos.\"\"\""
  ```

Beide Methoden übergeben den Wert `COMPANYNAME="Acme ""Widgets"" and ""Gizmos."""` an den **msiexec** Befehl.

**Topics**
+ [Installieren Sie MSI (Windows)](#action-modules-install-msi)
+ [Deinstallieren Sie MSI (Windows)](#action-modules-uninstall-msi)

### Installieren Sie MSI (Windows)
<a name="action-modules-install-msi"></a>

Das `InstallMSI` Aktionsmodul installiert eine Windows-Anwendung mithilfe einer MSI-Datei. Sie können die MSI-Datei mithilfe eines lokalen Pfads, einer S3-Objekt-URI oder einer Web-URL angeben. Die Neustartoption konfiguriert das Neustartverhalten des Systems.

AWSTOE generiert den **msiexec** Befehl auf der Grundlage der Eingabeparameter für das Aktionsmodul. Werte für die Eingabeparameter `path` (Speicherort der MSI-Datei) und `logFile` (Speicherort der Protokolldatei) müssen in Anführungszeichen („) eingeschlossen werden.

Die folgenden MSI-Exitcodes gelten als erfolgreich:
+ 0 (Erfolg)
+ 1614 (ERROR\$1PRODUCT\$1UNINSTALL)
+ 1641 (Neustart eingeleitet)
+ 3010 (Neustart erforderlich)


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | 
| --- | --- | --- | --- | --- | --- | 
| path |  Geben Sie den Speicherort der MSI-Datei mit einer der folgenden Methoden an: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html) Verkettungsausdrücke sind zulässig.  | Zeichenfolge | Ja | – | – | 
| reboot |  Konfigurieren Sie das Verhalten beim Systemneustart, das auf eine erfolgreiche Ausführung des Aktionsmoduls folgt. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Zeichenfolge | Nein | Allow | Allow, Force, Skip | 
| logOptions |  Geben Sie die Optionen an, die für die MSI-Installationsprotokollierung verwendet werden sollen. Die angegebenen Flags werden zusammen mit den `/L` Befehlszeilenparametern zur Aktivierung der Protokollierung an das MSI-Installationsprogramm übergeben. Wenn keine Flags angegeben sind, AWSTOE wird der Standardwert verwendet. Weitere Informationen zu Protokolloptionen für MSI finden Sie unter [Befehlszeilenoptionen](https://learn.microsoft.com/en-us/windows/win32/msi/command-line-options) in der Microsoft *Windows Installer-Produktdokumentation*.  | Zeichenfolge | Nein | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  Ein absoluter oder relativer Pfad zum Speicherort der Protokolldatei. Wenn der Protokolldateipfad nicht existiert, wird er erstellt. Wenn der Protokolldateipfad nicht angegeben wird, AWSTOE wird das MSI-Installationsprotokoll nicht gespeichert.  | Zeichenfolge | Nein | – | – | 
| properties |  Schlüssel-Wert-Paare für MSI-Logging-Eigenschaften, zum Beispiel: `TARGETDIR: "C:\target\location"`   Hinweis: Die Änderung der folgenden Eigenschaften ist nicht zulässig: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Map [Zeichenfolge] Zeichenfolge | Nein | – | – | 
| ignoreAuthenticodeSignatureErrors |  Markierung zum Ignorieren von Fehlern bei der Überprüfung der Authenticode-Signatur für das im Pfad angegebene Installationsprogramm. Der **Get-AuthenticodeSignature** Befehl wird verwendet, um Installationsprogramme zu validieren. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Boolesch | Nein | false | true, false | 
| allowUnsignedInstaller |  Markierung, die die Ausführung des im Pfad angegebenen unsignierten Installationsprogramms ermöglicht. Der **Get-AuthenticodeSignature** Befehl wird verwendet, um Installationsprogramme zu validieren. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Boolesch | Nein | false | true, false | 

**Beispiele**  
Die folgenden Beispiele zeigen Varianten des Eingabeabschnitts für Ihr Komponentendokument, abhängig von Ihrem Installationspfad.

**Eingabebeispiel: Installation im lokalen Dokumentpfad**

```
- name: local-path-install
  steps:
    - name: LocalPathInstaller
      action: InstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-install.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**Eingabebeispiel: Amazon S3 S3-Pfadinstallation**

```
- name: s3-path-install
  steps:
    - name: S3PathInstaller
      action: InstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-install.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**Eingabebeispiel: Installation eines Webpfads**

```
- name: web-path-install
  steps:
    - name: WebPathInstaller
      action: InstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-install.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**Ausgabe**  
Das Folgende ist ein Beispiel für die Ausgabe des `InstallMSI` Aktionsmoduls.

```
{
	"logFile": "web-path-install.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

### Deinstallieren Sie MSI (Windows)
<a name="action-modules-uninstall-msi"></a>

Mit dem `UninstallMSI` Aktionsmodul können Sie eine Windows-Anwendung mithilfe einer MSI-Datei entfernen. Sie können den Speicherort der MSI-Datei mithilfe eines lokalen Dateipfads, einer S3-Objekt-URI oder einer Web-URL angeben. Die Neustartoption konfiguriert das Neustartverhalten des Systems.

AWSTOE generiert den **msiexec** Befehl auf der Grundlage der Eingabeparameter für das Aktionsmodul. Der Speicherort der MSI-Datei (`path`) und der Speicherort der Protokolldatei (`logFile`) werden bei der Generierung des **msiexec** Befehls explizit in doppelte Anführungszeichen („) eingeschlossen.

Die folgenden MSI-Exitcodes werden als erfolgreich angesehen:
+ 0 (Erfolg)
+ 1605 (ERROR\$1UNKNOWN\$1PRODUCT)
+ 1614 (ERROR\$1PRODUCT\$1DEINSTALLIERT)
+ 1641 (Neustart eingeleitet)
+ 3010 (Neustart erforderlich)


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standardwert | Zulässige Werte | 
| --- | --- | --- | --- | --- | --- | 
| path |  Geben Sie den Speicherort der MSI-Datei mit einer der folgenden Methoden an: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html) Verkettungsausdrücke sind zulässig.  | Zeichenfolge | Ja | – | – | 
| reboot |  Konfiguriert das Verhalten beim Systemneustart, das auf eine erfolgreiche Ausführung des Aktionsmoduls folgt. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Zeichenfolge | Nein | Allow | Allow, Force, Skip | 
| logOptions |  Geben Sie die Optionen an, die für die MSI-Installationsprotokollierung verwendet werden sollen. Die angegebenen Flags werden zusammen mit den `/L` Befehlszeilenparametern zur Aktivierung der Protokollierung an das MSI-Installationsprogramm übergeben. Wenn keine Flags angegeben sind, AWSTOE wird der Standardwert verwendet. Weitere Informationen zu Protokolloptionen für MSI finden Sie unter [Befehlszeilenoptionen](https://docs.microsoft.com/en-us/windows/win32/msi/command-line-options) in der Microsoft *Windows Installer-Produktdokumentation*.  | Zeichenfolge | Nein | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  Ein absoluter oder relativer Pfad zum Speicherort der Protokolldatei. Wenn der Protokolldateipfad nicht existiert, wird er erstellt. Wenn der Protokolldateipfad nicht angegeben wird, AWSTOE wird das MSI-Installationsprotokoll nicht gespeichert.  | Zeichenfolge | Nein | – | – | 
| properties |  Schlüssel-Wert-Paare für MSI-Logging-Eigenschaften, zum Beispiel: `TARGETDIR: "C:\target\location"`   Hinweis: Die Änderung der folgenden Eigenschaften ist nicht zulässig: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Map [Zeichenfolge] Zeichenfolge | Nein | – | – | 
| ignoreAuthenticodeSignatureErrors |  Markierung zum Ignorieren von Fehlern bei der Überprüfung der Authenticode-Signatur für das im Pfad angegebene Installationsprogramm. Der **Get-AuthenticodeSignature** Befehl wird verwendet, um Installationsprogramme zu validieren. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Boolesch | Nein | false | true, false | 
| allowUnsignedInstaller |  Markierung, die die Ausführung des im Pfad angegebenen unsignierten Installationsprogramms ermöglicht. Der **Get-AuthenticodeSignature** Befehl wird verwendet, um Installationsprogramme zu validieren. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html)  | Boolesch | Nein | false | true, false | 

**Beispiele**  
Die folgenden Beispiele zeigen Varianten des Eingabeabschnitts für Ihr Komponentendokument, abhängig von Ihrem Installationspfad.

**Eingabebeispiel: Installation des lokalen Dokumentpfads entfernen**

```
- name: local-path-uninstall
  steps:
    - name: LocalPathUninstaller
      action: UninstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-uninstall.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**Eingabebeispiel: Amazon S3 S3-Pfadinstallation entfernen**

```
- name: s3-path-uninstall
  steps:
    - name: S3PathUninstaller
      action: UninstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-uninstall.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**Eingabebeispiel: Webpfad-Installation entfernen**

```
- name: web-path-uninstall
  steps:
    - name: WebPathUninstaller
      action: UninstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-uninstall.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**Ausgabe**  
Das Folgende ist ein Beispiel für die Ausgabe des `UninstallMSI` Aktionsmoduls.

```
{
	"logFile": "web-path-uninstall.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

## Aktionsmodule des Systems
<a name="action-modules-system-actions"></a>

Im folgenden Abschnitt werden Aktionsmodule beschrieben, die Systemaktionen ausführen oder Systemeinstellungen aktualisieren.

**Topics**
+ [Neustart (Linux, Windows)](#action-modules-reboot)
+ [SetRegistry (Windows)](#action-modules-setregistry)
+ [OS aktualisieren (Linux, Windows)](#action-modules-updateos)

### Neustart (Linux, Windows)
<a name="action-modules-reboot"></a>

Das Aktionsmodul **Reboot startet** die Instanz neu. Es verfügt über eine konfigurierbare Option, um den Start des Neustarts zu verzögern. Standardmäßig `delaySeconds` ist auf eingestellt, was bedeutet`0`, dass es keine Verzögerung gibt. Das Schrittzeitlimit wird für das Aktionsmodul Neustart nicht unterstützt, da es nicht gilt, wenn die Instanz neu gestartet wird.

Wenn die Anwendung vom Systems Manager Agent aufgerufen wird, übergibt sie den Exit-Code (`3010`für Windows, `194` für Linux) an den Systems Manager Agent. Der Systems Manager Agent führt den Systemneustart wie unter [Managed Instance from Scripts neu starten](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html) beschrieben durch.

Wenn die Anwendung auf dem Host als eigenständiger Prozess aufgerufen wird, speichert sie den aktuellen Ausführungsstatus, konfiguriert einen Auslöser für die automatische Ausführung nach dem Neustart, sodass die Anwendung nach dem Neustart erneut ausgeführt wird, und startet dann das System neu.

**Automatischer Start-Trigger nach dem Neustart:**
+ **Windows.** AWSTOE erstellt einen Windows Taskplaner-Eintrag mit einem Trigger, der automatisch ausgeführt wird unter `SystemStartup`
+ **Linux**. AWSTOE fügt einen Job in Crontab hinzu, der nach dem Neustart des Systems automatisch ausgeführt wird.

```
@reboot /download/path/awstoe run --document s3://bucket/key/doc.yaml
```

Dieser Trigger wird bereinigt, wenn die Anwendung gestartet wird.

**Erneute Versuche**  
Standardmäßig ist die maximale Anzahl von Wiederholungen auf den Systems Manager `CommandRetryLimit` festgelegt. Wenn die Anzahl der Neustarts das Wiederholungslimit überschreitet, schlägt die Automatisierung fehl. Sie können das Limit ändern, indem Sie die Konfigurationsdatei (`Mds.CommandRetryLimit`) des Systems Manager Manager-Agenten bearbeiten. Weitere Informationen finden Sie unter [Laufzeitkonfiguration](https://github.com/aws/amazon-ssm-agent/blob/mainline/README.md#runtime-configuration) im Open Source-System Manager-Agent.

Um das **Reboot-Aktionsmodul** für Schritte zu verwenden, die einen Neustart beinhalten `exitcode` (z. B.`3010`), müssen Sie die Anwendungsbinärdatei als ausführen`sudo user`.


**Input**  

| Tastenname | Description | Typ | Erforderlich | Standard | 
| --- | --- | --- | --- | --- | 
| delaySeconds | Verzögert eine bestimmte Zeit, bevor ein Neustart initiiert wird. | Ganzzahl |  Nein  |  `0`  | 

**Eingabebeispiel: Neustart-Schritt**

```
  - name: RebootStep
    action: Reboot
    onFailure: Abort
    maxAttempts: 2
    inputs:
      delaySeconds: 60
```

**Ausgabe**

Keine.

Wenn das **Reboot-Modul** abgeschlossen ist, fährt Image Builder mit dem nächsten Schritt im Build fort.

### SetRegistry (Windows)
<a name="action-modules-setregistry"></a>

Das **SetRegistry**Aktionsmodul akzeptiert eine Liste von Eingaben und ermöglicht es Ihnen, den Wert für den angegebenen Registrierungsschlüssel festzulegen. Wenn ein Registrierungsschlüssel nicht existiert, wird er im definierten Pfad erstellt. Diese Funktion gilt nur für Windows.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| path | Pfad des Registrierungsschlüssels. | Zeichenfolge | Ja | 
| name | Name des Registrierungsschlüssels. | Zeichenfolge | Ja | 
| value | Wert des Registrierungsschlüssels. | String/Number/Array | Ja | 
| type | Werttyp des Registrierungsschlüssels. | Zeichenfolge | Ja | 

**Unterstützte Pfadpräfixe**
+ `HKEY_CLASSES_ROOT / HKCR:`
+ `HKEY_USERS / HKU:`
+ `HKEY_LOCAL_MACHINE / HKLM:`
+ `HKEY_CURRENT_CONFIG / HKCC:`
+ `HKEY_CURRENT_USER / HKCU:`

**Unterstützte -Typen**
+ `BINARY`
+ `DWORD`
+ `QWORD`
+ `SZ`
+ `EXPAND_SZ`
+ `MULTI_SZ`

**Eingabebeispiel: Legen Sie die Werte der Registrierungsschlüssel fest**

```
  - name: SetRegistryKeyValues
    action: SetRegistry
    maxAttempts: 3
    inputs:
      - path: HKLM:\SOFTWARE\MySoftWare
        name: MyName
        value: FirstVersionSoftware
        type: SZ
      - path: HKEY_CURRENT_USER\Software\Test
        name: Version
        value: 1.1
        type: DWORD
```

**Ausgabe**

Keine.

### OS aktualisieren (Linux, Windows)
<a name="action-modules-updateos"></a>

Das **UpdateOS-Aktionsmodul** bietet Unterstützung für die Installation von Windows- und Linux-Updates. Es installiert standardmäßig alle verfügbaren Updates. Alternativ können Sie eine Liste mit einem oder mehreren spezifischen Updates konfigurieren, die das Aktionsmodul installieren soll. Sie können auch Updates angeben, die von der Installation ausgeschlossen werden sollen.

Wenn sowohl die Listen „Einschließen“ als auch „Ausschließen“ bereitgestellt werden, kann die resultierende Liste von Updates nur die Updates enthalten, die in der „Einschluss“ -Liste aufgeführt sind und nicht in der Ausschlussliste aufgeführt sind.

**Anmerkung**  
**UpdateOS** unterstützt Amazon Linux 2023 (AL2023) nicht. Wir empfehlen Ihnen, Ihr Basis-AMI auf die neue Version zu aktualisieren, die mit jeder Version geliefert wird. Weitere Alternativen finden Sie unter [Steuern der Updates, die Sie von Haupt- und Nebenversionen erhalten haben](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html#controlling-release-updates), im *Amazon Linux 2023-Benutzerhandbuch*.
+ **Windows**. Updates werden von der auf dem Zielcomputer konfigurierten Update-Quelle installiert.
+ **Linux**. Die Anwendung sucht nach dem unterstützten Paketmanager auf der Linux-Plattform und verwendet entweder den `apt-get` Paketmanager `yum` oder. Wenn keiner von beiden unterstützt wird, wird ein Fehler zurückgegeben. Sie sollten über die `sudo` erforderlichen Berechtigungen verfügen, um das **UpdateOS-Aktionsmodul** auszuführen. Wenn Sie keine `sudo` Berechtigungen haben, `error.Input` wird ein zurückgegeben.


**Input**  

| Tastenname | Description | Typ | Erforderlich | 
| --- | --- | --- | --- | 
| include |  Für Windows können Sie Folgendes angeben: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html) Für Linux können Sie ein oder mehrere Pakete angeben, die in die Liste der zu installierenden Updates aufgenommen werden sollen.  | Liste der Zeichenketten | Nein | 
| exclude |  Für Windows können Sie Folgendes angeben: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/imagebuilder/latest/userguide/toe-action-modules.html) Für Linux können Sie ein oder mehrere Pakete angeben, die von der Liste der Updates für die Installation ausgeschlossen werden sollen.  | Liste der Zeichenketten | Nein | 

**Eingabebeispiel: Unterstützung für die Installation von Linux-Updates hinzufügen**

```
  - name: UpdateMyLinux
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      exclude:
        - ec2-hibinit-agent
```

**Eingabebeispiel: Unterstützung für die Installation von Windows-Updates hinzufügen**

```
  - name: UpdateWindowsOperatingSystem
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      include:
        - KB1234567
        - '*Security*'
```

**Ausgabe**

Keine.

# Eingabe für den Befehl AWSTOE run konfigurieren
<a name="toe-run-config-input"></a>

Um die Befehlszeileneingabe für Ihren AWSTOE **run** Befehl zu optimieren, können Sie Einstellungen für Befehlsparameter und Optionen in eine Eingabekonfigurationsdatei im JSON-Format mit einer `.json` Dateierweiterung aufnehmen. AWSTOE kann Ihre Datei von einem der folgenden Orte aus lesen:
+ Ein lokaler Dateipfad (*./config.json*).
+ Ein S3-Bucket (*s3://<bucket-path>/<bucket-name>/config.json*).

Wenn Sie den **run** Befehl eingeben, können Sie die Eingabekonfigurationsdatei mithilfe des **--config** Parameters angeben. Zum Beispiel:

```
awstoe run --config <file-path>/config.json
```

**Eingabe-Konfigurationsdatei**  
Die JSON-Datei für die Eingabekonfiguration enthält Schlüssel-Wert-Paare für alle Einstellungen, die Sie direkt über **run** Befehlsparameter und Optionen angeben können. Wenn Sie eine Einstellung sowohl in der Eingabekonfigurationsdatei als auch im **run** Befehl als Parameter oder Option angeben, gelten die folgenden Prioritätsregeln:

**Regeln der Rangfolge**

1. Eine Einstellung, die über einen Parameter oder eine Option direkt an den **run** Befehl in der AWS CLIübergeben wird, überschreibt jeden Wert, der in der Eingabekonfigurationsdatei für dieselbe Einstellung definiert ist.

1. Eine Einstellung in der Eingabekonfigurationsdatei überschreibt den Standardwert einer Komponente.

1. Wenn keine anderen Einstellungen an das Komponentendokument übergeben werden, kann es einen Standardwert anwenden, sofern vorhanden.

Es gibt zwei Ausnahmen von dieser Regel: Dokumente und Parameter. Diese Einstellungen funktionieren in der Eingabekonfiguration und als Befehlsparameter unterschiedlich. Wenn Sie die Eingabekonfigurationsdatei verwenden, dürfen Sie diese Parameter nicht direkt für den **run** Befehl angeben. Andernfalls wird ein Fehler generiert.

**Einstellungen der Komponenten**  
Die Eingabekonfigurationsdatei enthält die folgenden Einstellungen. Um Ihre Datei zu optimieren, können Sie alle optionalen Einstellungen weglassen, die nicht benötigt werden. Alle Einstellungen sind optional, sofern nicht anders angegeben.
+ **cwIgnoreFailures**(Boolean) — Ignoriert Protokollfehler in den CloudWatch Protokollen.
+ **cwLogGroup**(String) — Der `LogGroup` Name für die CloudWatch Protokolle.
+ **cwLogRegion**(Zeichenfolge) — Die AWS Region, die für die CloudWatch Protokolle gilt.
+ **cwLogStream**(String) — Der `LogStream` Name für die CloudWatch Logs, der angibt, AWSTOE wohin die `console.log` Datei gestreamt werden soll.
+ **documentS3 BucketOwner** (String) — Die Konto-ID des Bucket-Besitzers für S3-URI-basierte Dokumente.
+ **documents** (Array von Objekten, erforderlich) — Ein Array von JSON-Objekten, die die Dokumente der YAML-Komponente darstellen, die den AWSTOE **run** Befehl ausführt. Es muss mindestens ein Komponentendokument angegeben werden.

  Jedes Objekt besteht aus den folgenden Feldern:
  + **path** (String, erforderlich) — Der Dateispeicherort des YAML-Komponentendokuments. Dies muss einer der folgenden sein:
    + Ein lokaler Dateipfad (*./component-doc-example.yaml*).
    + Ein S3-URI (`s3://bucket/key`).
    + Ein ARN für die Build-Version einer Image Builder-Komponente (arn:aws:imagebuilder:us-west--und 2021.12.02/1). *2:123456789012* *my-example-component*
  + **parameters** (array of objects) — Ein Array von Objekten mit Schlüssel-Wert-Paaren, von denen jedes einen komponentenspezifischen Parameter darstellt, den der Befehl bei der Ausführung des Komponentendokuments übergibt. **run** Parameter sind für Komponenten optional. Für das Komponentendokument können Parameter definiert sein oder nicht.

    Jedes Objekt besteht aus den folgenden Feldern:
    + **name** (Zeichenfolge, erforderlich) — Der Name des Komponentenparameters.
    + **value** (String, erforderlich) — Der Wert, der für den benannten Parameter an das Komponentendokument übergeben werden soll.

    Weitere Informationen zu Komponentenparametern finden Sie im Abschnitt **Parameter** [Verwenden Sie Variablen in Ihrem Dokument mit benutzerdefinierten Komponenten](toe-user-defined-variables.md) auf der Seite.
+ **executonId** (String) — Dies ist die eindeutige ID, die für die Ausführung des aktuellen Befehls gilt. **run** Diese ID ist in den Namen der Ausgabe- und Protokolldateien enthalten, um diese Dateien eindeutig zu identifizieren und sie mit der aktuellen Befehlsausführung zu verknüpfen. Wenn diese Einstellung weggelassen wird, wird eine GUID AWSTOE generiert.
+ **LogDirectory** (Zeichenfolge) — Das Zielverzeichnis, in dem alle Protokolldateien dieser Befehlsausführung AWSTOE gespeichert werden. Standardmäßig befindet sich dieses Verzeichnis im folgenden übergeordneten Verzeichnis:`TOE_<DATETIME>_<EXECUTIONID>`. Wenn Sie das Protokollverzeichnis nicht angeben, AWSTOE wird das aktuelle Arbeitsverzeichnis (`.`) verwendet.
+ **logS3 BucketName** (Zeichenfolge) — Wenn Komponentenprotokolle in Amazon S3 gespeichert sind (empfohlen), werden die Komponentenanwendungsprotokolle in den in diesem Parameter genannten S3-Bucket AWSTOE hochgeladen.
+ **logS3 BucketOwner** (Zeichenfolge) — Wenn Komponentenprotokolle in Amazon S3 gespeichert werden (empfohlen), ist dies die Eigentümerkonto-ID für den Bucket, in den die Protokolldateien AWSTOE geschrieben werden.
+ **logS3 KeyPrefix** (String) — Wenn Komponentenprotokolle in Amazon S3 gespeichert werden (empfohlen), ist dies das S3-Objektschlüsselpräfix für den Protokollspeicherort im Bucket.
+ **parameters** (Array von Objekten) — Ein Array von Objekten mit Schlüssel-Wert-Paaren, die Parameter darstellen, die global für alle Komponenten gelten, die in der aktuellen **run** Befehlsausführung enthalten sind.
  + **name** (String, erforderlich) — Der Name des globalen Parameters.
  + **value** (String, erforderlich) — Der Wert, der an alle Komponentendokumente für den benannten Parameter übergeben werden soll.
+ **phases** (String) — Eine durch Kommas getrennte Liste, die angibt, welche Phasen in den Dokumenten der YAML-Komponente ausgeführt werden sollen. Wenn ein Komponentendokument zusätzliche Phasen enthält, werden diese nicht ausgeführt.
+ **StateDirectory** (Zeichenfolge) — Der Dateipfad, in dem Statusverfolgungsdateien gespeichert werden.
+ **trace** (Boolean) — Ermöglicht die ausführliche Protokollierung in der Konsole.

**Beispiele**  
Das folgende Beispiel zeigt eine Eingabekonfigurationsdatei, die die `test` Phasen `build` und für zwei Komponentendokumente ausführt:`sampledoc.yaml`, und. `conversation-intro.yaml` Jedes Komponentendokument hat einen Parameter, der nur für sich selbst gilt, und beide verwenden einen gemeinsamen Parameter. Der `project` Parameter gilt für beide Komponentendokumente.

```
{
   "documents": [
     {
       "path": "<file path>/awstoe/sampledoc.yaml>",
       "parameters": [
         {
           "name": "dayofweek",
           "value": "Monday"
         }
       ]
     },
     {
       "path": "<file path>/awstoe/conversation-intro.yaml>",
       "parameters": [
         {
           "name": "greeting",
           "value": "Hello, HAL."
         }
       ]
     }
   ],
   "phases": "build,test",
   "parameters": [
     {
       "name": "project",
       "value": "examples"
     }
   ],
   "cwLogGroup": "<log_group_name>",
   "cwLogStream": "<log_stream_name>",
   "documentS3BucketOwner": "<owner_aws_account_number>",
   "executionId": "<id_number>",
   "logDirectory": "<local_directory_path>",
   "logS3BucketName": "<bucket_name_for_log_files>",
   "logS3KeyPrefix": "<key_prefix_for_log_files>",
   "logS3BucketOwner": "<owner_aws_account_number>"
 }
```