# Wie kann ich den Enginsight Pulsar automatisch auf mehreren Windows-Systemen gleichzeitig ausrollen?

Es ist möglich, den Enginsight Agenten Pulsar **automatisiert** auf einer beliebigen Anzahl von Hosts mit Windows-Betriebssystem (z.B. virtuelle Maschinen, dedizierte Server oder andere Systeme) basierend auf einem Master-Image gleichzeitig auszurollen.&#x20;

Nimm dazu die folgenden Schritte vor:

{% stepper %}
{% step %}

### Pulsar auf einem Master-Host installieren

1. Starte das Windows-System, von dem ein Master-Image mit vorbereitetem Pulsar erstellt werden soll.
2. Navigiere zur Enginsight Plattform und folge den [Installationsanweisungen zum Pulsar](https://docs.enginsight.com/docs/manual/installation-und-konfiguration/installation-und-konfiguration/enginsight-komponenten/pulsar) für die **automatische Installation** *auf* *Windows-Clients* wie im Enginsight Handbuch beschrieben.
3. Speichere dir dabei das Installationsskript aus Schritt 4 der Pulsar-Installationsanleitung ab, da du es später wieder benötigst.
   {% endstep %}

{% step %}

### Pulsar-Dienste stoppen und Starttyp anpassen

1. Stoppe nach erfolgreicher Installation die Pulsar-Dienste **Enginsight Pulsar** und **Enginsight Supervisor** in einer Administrator-PowerShell mit folgenden Befehlen:

```
Stop-Service "Enginsight Pulsar"
Stop-Service "Enginsight Supervisor"
```

2. Stelle den Starttyp der Pulsar-Dienste mit folgenden Befehlen auf manuell um, damit sie beim Erstellen des Images nicht automatisch starten:

```
Set-Service -Name "Enginsight Pulsar" -StartupType Manual
Set-Service -Name "Enginsight Supervisor" -StartupType Manual
```

{% endstep %}

{% step %}

### Master-Host in der Plattform löschen

Navigiere in der Enginsight Plattform zu **Hosts** → **Übersicht** und lösche den bei der Installation des Pulsars automatisch angelegten Windows-Client für das Master-Image.&#x20;

{% hint style="warning" %}
**Bitte beachte**: Das Löschen von Hosts aus der Host-Übersicht hat *nicht* die direkte Deinstallation des zugehörigen Pulsars zur Folge.
{% endhint %}
{% endstep %}

{% step %}

### Sicherungskopie der Pulsar-Konfigurationsdatei erstellen

Erstelle mit folgendem Befehl eine Sicherungskopie der Pulsar-Konfigurationsdatei, da die ursprüngliche Datei beim automatischen Ausrollen des Pulsars überschrieben wird:

```
Copy-Item "C:\Programme\Enginsight\Pulsar\config.json" `
"C:\Programme\Enginsight\Pulsar\config.json.bak"
```

{% hint style="info" %}
Sollte beim automatischen Ausrollen des Pulsars etwas nicht wie gewünscht funktionieren, kannst du die ursprüngliche Konfigurationsdatei aus der Sicherung wiederherstellen. Führe dann das Skript für die Provisionierung aus [Schritt 7](#skript-fur-die-provisionierung-abspeichern-und-ausfuhren) erneut aus.
{% endhint %}
{% endstep %}

{% step %}

### Master-Image speichern

Speichere das Master-Image mit vorbereitetem Pulsar ab.
{% endstep %}

{% step %}

### Textdatei mit Host-Namen erstellen

1. Erstelle nun eine .txt-Datei, die alle Host-Namen enthält, auf denen der Pulsar ausgerollt werden soll. Achte darauf, dass pro Zeile ein Host-Name steht, z.B.:

```
VDI-Client-01
VDI-Client-02
VDI-Client-03
```

{% hint style="danger" %}
**Bitte beachte**: Die Host-Namen müssen **exakt** den Namen der (virtuellen) Maschinen entsprechen, auf denen ein Pulsar installiert werden soll. Die Standardzuordnung erfolgt über `$env:computername`.
{% endhint %}

2. Speichere die Textdatei mit einem aussagekräftigen Namen ab.
   {% endstep %}

{% step %}

### Skript für die Provisionierung abspeichern und ausführen

1. Kopiere das folgende Skript:

```
param ($hosts, $accessKeyId, $accessKeySecret, $outFolder=".")

if ($hosts -eq $null) {
    throw "Must provide a file (-hosts) with line-by-line hostnames to create configs for"
}

if (($accessKeyId -eq $null) -or ($accessKeySecret -eq $null)) {
    throw "Must provide credentials (-accessKeyId, -accessKeySecret) suitable for Pulsar installation"
}

Write-Host "Creating configs for hosts from ${hosts} in `"${outFolder}`", using existing config.json as template"

if (-not (Test-Path -Path $outFolder)) {
    Write-Host "${outFolder} does not exist, creating it"
    try {
        New-Item -ItemType Directory -Path $outFolder | Out-Null
    } catch {
        throw "Failed to create output folder`n$_"
    }
}

try {
    $configTemplate = Get-Content -Raw -Path "C:\Program Files\Enginsight\Pulsar\config.json" | ConvertFrom-Json
} catch {
    throw "Failed to read C:\Program Files\Enginsight\Pulsar\config.json - is Pulsar installed properly?`n$_"
}

$args = "-install","-accessKeyId",$accessKeyId,"-accessKeySecret",$accessKeySecret,"-license",$configTemplate.license,
    "-api",$configTemplate.api.url
if ($configTemplate.api.proxy -ne "") {
    $args += "-proxy",$configTemplate.api.proxy,"-noProxy",$configTemplate.api.noProxy
}

foreach($hostname in Get-Content $hosts) {
    $hostname = $hostname.Trim()
    if ($hostname -eq "") {
        continue
    }

    $outFile = Join-Path -Path ${outFolder} -ChildPath "config_${hostname}.json"

    if (Test-Path -Path $outFile) {
        Write-Error "Configuration for host ${hostname} already exists at ${outFile}, skipping"
        continue
    }

    $proxyParams = ""

    Write-Host "Creating config for host ${hostname}"

    & "C:\Program Files\Enginsight\Pulsar\ngs-pulsar-amd64.exe" @args
    if (-not ($?)) {
        throw "Failed to create config for ${hostname}"
    }

    try {
        $config = Get-Content -Raw -Path "C:\Program Files\Enginsight\Pulsar\config.json" | ConvertFrom-Json
        $config.override = $configTemplate.override
        if ($configTemplate.tieredTransactionLog -ne $null) {
            $config.tieredTransactionLog = $configTemplate.tieredTransactionLog
        }
    } catch {
        throw "Failed to read newly created config file`n$_"
    }

    try {
        $config | ConvertTo-Json -Depth 4 | Set-Content -Path $outFile -Encoding UTF8NoBOM
        Write-Host "Successfully created config for ${hostname} at ${outFile}"
    } catch {
        throw "Failed to write config for ${hostname} to ${outFile}`n$_"
    }
}
```

2. Speichere das Skript unter dem folgenden Pfad ab:

```
C:\Programme\Enginsight\Pulsar\provision.ps1
```

3. Führe das Skript mit folgendem Befehl aus:

```
& "C:\Program Files\Enginsight\Pulsar\provision.ps1" -hosts "<PfadZurHostsDatei>\<HostsDateiname>.txt" -accessKeyId "<AccessKeyID>" -accessKeySecret "<AccessKeySecret>"
```

{% hint style="info" %}
Vergiss dabei nicht, die folgenden Parameter in `<>` entsprechend zu ersetzen:

* `<PfadZurHostsDatei>`: Der Pfad zur Textdatei, die alle Host-Namen enthält.
* `<HostsDateiname>`: Der Name der Textdatei, die alle Host-Namen enthält.
* `<AccessKeyID>` und `<AccessKeySecret>`: Der Access Key und das Access Key Secret, die du aus dem in [Schritt 1.3](#pulsar-auf-einem-master-host-installieren) gespeicherten Installationsskript erhalten hast.
  {% endhint %}

Mit Ausführung des Skripts wird für jeden Host, der korrekt in der [in Schritt 6](#textdatei-mit-host-namen-erstellen) erstellten Textdatei gelistet wurde, eine eigene Pulsar-Konfigurationsdatei erstellt.
{% endstep %}

{% step %}

### Pulsar-Dienste auf den Hosts starten und Starttyp anpassen

Nun muss auf jedem Host, auf der ein Pulsar installiert wurde, die passende Konfigurationsdatei in das Pulsar-Verzeichnis kopiert, die Pulsar-Dienste wieder gestartet und der Starttyp auf automatisch umgestellt werden.&#x20;

Nutze dazu folgendes Startskript, das du bspw. per Windows-Gruppenrichtlinie auf die entsprechenden Hosts verteilen kannst:

```
cp "<PfadZurKonfigurationsdatei>\config_${env:computername}.json" "C:\Program Files\Enginsight\Pulsar\config.json"
Start-Service "Enginsight Pulsar"

Set-Service -Name "Enginsight Pulsar" -StartupType Automatic
Set-Service -Name "Enginsight Supervisor" -StartupType Automatic
```

{% hint style="info" %}
Vergiss dabei nicht, den Parameter `<PfadZurKonfigurationsdatei>` entsprechend zu ersetzen.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Weitere Ressourcen

* [Wie kann ich den Enginsight Pulsar manuell auf mehreren Windows-VMs gleichzeitig ausrollen?](/docs/knowledge-base/pulsar/wie-kann-ich-den-enginsight-pulsar-manuell-auf-mehreren-windows-vms-gleichzeitig-ausrollen.md)
* [Wie kann ich den Enginsight Pulsar automatisiert in flüchtigen Windows-VDI-Umgebungen ausrollen?](/docs/knowledge-base/pulsar/wie-kann-ich-den-enginsight-pulsar-automatisiert-in-fluchtigen-windows-vdi-umgebungen-ausrollen.md)
* [Wie kann ich den Enginsight Pulsar per Windows-Gruppenrichtlinie ausrollen?](/docs/knowledge-base/pulsar/wie-kann-ich-den-enginsight-pulsar-per-windows-gruppenrichtlinie-ausrollen.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.enginsight.com/docs/knowledge-base/pulsar/wie-kann-ich-den-enginsight-pulsar-automatisch-auf-mehreren-windows-systemen-gleichzeitig-ausrollen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
