> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/automatisierung/scripts.md).

# Skripte

Sie können in PowerShell Universal PowerShell-Skripte erstellen, die manuell, nach einem Zeitplan oder bei Ereignissen innerhalb der Plattform ausgeführt werden. Sie werden auf der Festplatte gespeichert und in einem lokalen oder remote Git-Repository persistiert.

{% hint style="info" %}
Die Konfigurationsdatei `scripts.ps1` speichert die Skripteigenschaften.
{% endhint %}

## Ein neues Skript hinzufügen

Um ein neues Skript hinzuzufügen, klicken Sie auf der Seite Automatisierung / Skripte auf die Schaltfläche Neues Skript. Für das Skript stehen verschiedene Einstellungen zur Verfügung.

<figure><img src="/files/nUWdAlfXC2fRIYEXLAC2" alt=""><figcaption><p>Dialog Neues Skript</p></figcaption></figure>

## Skriptoptionen

### **Name**

Dies ist der Name des Skripts, wie er in Universal Automation angezeigt wird. Dies ist auch der Name, der zum Persistieren des Skripts auf der Festplatte verwendet wird. Der Name muss innerhalb des aktuellen Ordners eindeutig sein.

### Modul und Befehl

Siehe [Module und Befehle](#modules-and-commands) unten.

### **Beschreibung**

Diese Beschreibung des Skripts wird an verschiedenen Stellen in der UA-Benutzeroberfläche angezeigt und von den Universal-Cmdlets zurückgegeben.

### **Manuellen Aufruf deaktivieren**

Dies verhindert, dass ein Skript manuell ausgeführt wird. Dies wird sowohl in der Benutzeroberfläche als auch im Webserver und in den Cmdlets erzwungen.

### **Max. Auftragsverlauf**

Der maximale Auftragsverlauf definiert die Anzahl der Aufträge, die bei der Ausführung dieses Skripts gespeichert werden. Der Standardwert ist 100. Aufträge werden außerdem basierend auf der serverweiten Einstellung für die Aufbewahrungsdauer von Aufträgen auf der Seite Einstellungen / Allgemein bereinigt.

### **Fehleraktion**

Die Fehleraktion ändert, wie das Skript reagiert, wenn ein Fehler auftritt. Standardmäßig werden terminierende und nicht terminierende Fehler ignoriert und das Skript ist immer erfolgreich. Sie können diese Einstellung auf „stop“ ändern, damit Skripte sofort fehlschlagen, wenn ein Fehler auftritt.

Wenn Sie Fehler direkt in den Fehlerbereich schreiben möchten, ohne die Behandlung des Skripts zu verändern (zum Beispiel in einem Ausnahmehandler), verwenden Sie `Write-PSUError`, um den Fehlerdatensatz auszugeben; er erscheint dann im Fehler-Tab des Auftrags.

### **Umgebung**

Damit können Sie die erforderliche PowerShell-Umgebung für das Skript festlegen. Standardmäßig wird die serverweite Standard-PowerShell-Umgebung verwendet. PowerShell-Umgebungen werden beim ersten Start des Universal Servers automatisch gefunden oder aus der Datei `environments.ps1` gelesen. Sie können Umgebungen auch auf der Seite Einstellungen / Umgebungen hinzufügen.

### **Timeout**

Die Anzahl der Minuten, bevor das Skript abläuft. Der Standardwert 0 bedeutet, dass das Skript unbegrenzt läuft. Sobald ein Skript sein Timeout erreicht, wird es abgebrochen.

### Pipeline verwerfen

Wenn diese Option aktiviert ist, wird die Speicherung der Pipeline-Ausgabe deaktiviert. Dies reduziert den CPU- und Speicheraufwand der Aufträge erheblich, das Skript schreibt jedoch weiterhin in die Informations-, Warn- und Fehlerströme.

### **Gleichzeitige Aufträge**

Legt die maximale Anzahl gleichzeitiger Aufträge fest, mit denen das Skript ausgeführt werden kann. Der Standardwert ist 100.

```powershell
New-PSUScript -Name Script.ps1 -Path Script.Ps1 -ConcurrentJobs 1
```

### Ausführungsrollen

Mit der Eigenschaft Ausführungsrollen können Sie festlegen, welche Rollen während der Ausführung des Skripts zugewiesen werden. Standardmäßig wird das Skript basierend auf den Rollen des Aufrufers ausgeführt. In einigen Szenarien, zum Beispiel bei der Verwendung von Secrets mit Rollen, möchten Sie möglicherweise zusätzliche Rollen bereitstellen, die der Aufrufer nicht besitzt. Wenn Skripte in einem Zeitplan ausgeführt werden, verfügen sie über keine Rollen. Wenn Sie diese über Ausführungsrollen bereitstellen, können Sie im geplanten Skript Secret-Variablen mit Rollen verwenden.

## Ein Skript ausführen

Sie können ein Skript in der Benutzeroberfläche auf der Seite Automatisierung / Skripte ausführen, indem Sie auf Ausführen klicken oder auf Anzeigen und dann auf Ausführen. In jedem Fall erscheint der Ausführungsdialog, in dem Sie verschiedene Einstellungen für den Auftrag auswählen können.

<figure><img src="/files/PhKKmRTYdGNtA6Xcmusv" alt=""><figcaption><p>Dialog Skript ausführen</p></figcaption></figure>

### Ein Skript mit Parametern ausführen

{% hint style="info" %}
Mehr über Parameter erfahren Sie [hier](/powershell-universal/de/automatisierung/scripts/parameters.md).
{% endhint %}

PowerShell Universal ermittelt automatisch die in Ihren Skripten definierten Parameter. Dabei wird statische Codeanalyse genutzt, um den Typ, Standardwerte und einige Validierungen zu bestimmen, die dann in der Benutzeroberfläche dargestellt werden.

Sie könnten zum Beispiel ein Skript mit den folgenden Parametern haben:

```powershell
param(
    $Test,
    [DateTime]$Time, 
    [int]$Number,
    [PSCredential]$Credential,
    [System.ConsoleColor]$Color
)
```

Das Ergebnis ist eine Reihe von Eingabeoptionen basierend auf den Parametertypen.

<figure><img src="/files/4HG52FQnRwnagKnzYU9l" alt=""><figcaption><p>Dialog Skriptparameter</p></figcaption></figure>

### Ein Skript als anderer Benutzer ausführen

{% hint style="info" %}
Die integrierte [Umgebung](/powershell-universal/de/config/environments.md) unterstützt die Ausführung mit alternativen Anmeldeinformationen nicht.
{% endhint %}

Sie können Skripte als anderer Benutzer ausführen, indem Sie [Secret-Variablen](/powershell-universal/de/plattform/variables.md#creating-a-secret-variable) konfigurieren. PowerShell Universal verwendet das Microsoft Secret Management-Modul zur Integration mit Secret-Anbietern. Weitere Informationen zu Secrets finden Sie unter Variablen.

1. Erstellen Sie eine neue PSCredential-Secret-Variable.

Klicken Sie auf Plattform \ Variablen und dann auf Secret erstellen. Wählen Sie den Variablentyp PSCredential aus. Geben Sie den Benutzernamen und das Passwort ein. Stellen Sie sicher, dass der Wert „Disable Run As Support“ nicht aktiviert ist.

<figure><img src="/files/tO90Buyx1ZsghWq9jRy8" alt=""><figcaption><p>Secret-Variable erstellen</p></figcaption></figure>

2. Führen Sie das Skript aus und wählen Sie die Anmeldeinformationen aus

Navigieren Sie zurück zu Automatisierung \ Skripte und klicken Sie auf die Schaltfläche Skript ausführen. Wählen Sie eine andere Umgebung als die integrierte Umgebung aus. Standardmäßig ist dies entweder PowerShell 7 oder Windows PowerShell 5.1.

Sie werden nun über das Dropdown-Menü Run As aufgefordert, die Anmeldeinformationen auszuwählen. Dort können Sie die Anmeldeinformationen im Ausführungsdialog auswählen.

<figure><img src="/files/oZ0qOy6aRmfIhZghIhmg" alt=""><figcaption><p>Als Benutzer ausführen</p></figcaption></figure>

### Ein Skript auf einem anderen Computer ausführen

Sie können das Dropdown-Menü Computer verwenden, um andere Computer auszuwählen, auf denen ein Skript ausgeführt werden soll. Der Standardwert ist die Ausführung auf einem beliebigen verfügbaren Computer.

### Ein Skript auf allen Computern ausführen

Sie können ein Skript auf allen Computern ausführen, indem Sie im Dropdown-Menü Computer die Option Alle Computer auswählen.

### Ein Skript aus einer App mit Ausgabe ausführen

Wenn Sie ein Skript aus einer App ausführen und die Ausgabe während der Ausführung anzeigen möchten, verwenden Sie das folgende Beispiel. Es nutzt `Invoke-PSUScript` und `Get-PSUJobOutput`.

```powershell
New-UDButton -OnClick {
    $Job = Invoke-PSUScript -Name Script.ps1
    while($Job.Status -eq 'Running' -or $Job.Status -eq 'Queued')
    {
        [array]$Output = Get-PSUJobOutput -Job $Job
        $Job = Get-PSUJob -Id $Job.Id
        $Session:Code = $Output | ForEach-Object { 
            "$_`r`n"
        } | Join-String 
        Sync-UDElement -Id 'code'
        Start-Sleep -Seconds 1
    }
} -Text 'Run Script'

New-UDDynamic -Id 'code' -Content {
    if ($Session:Code)
    {
        New-UDSyntaxHighlighter -Code $Session:Code -Language batch
    }
}
```

### Lastverteilung

PowerShell Universal verwendet einen Lastverteilungsalgorithmus nach dem Prinzip des am wenigsten beschäftigten Servers. Wenn mehr als ein Server ein gültiges Ziel für einen Auftrag ist, wählt PowerShell Universal den Server mit der geringsten Anzahl laufender Aufträge aus.

## Remoting

Sie können PowerShell-Remoting nutzen, indem Sie `Invoke-Command` verwenden. PowerShell Universal unterstützt die Verwendung von `Enter-PSSession` oder `Import-PSSession` nicht.

## Kommentarbasierte Hilfe

Sie können kommentarbasierte Hilfe verwenden, um die Beschreibung, eine Zusammenfassung, parameterbasierte Hilfe und Links für Ihre Skripte zu definieren. Diese werden in der Benutzeroberfläche von PowerShell Universal angezeigt.

```powershell
<#
.SYNOPSIS 

This is a script for pinging other computers. 

.DESCRIPTION

This script can ping other computers. 

.PARAMETER HostName

The host name or address to ping. 

.LINK
https://www.ironmansoftware.com
#>
param($HostName)

Test-NetConnection $HostName
```

Das oben Genannte ergibt die folgende Benutzeroberfläche. Die Zusammenfassung wird als kurze Beschreibung angezeigt, und eine längere Beschreibung erscheint im Beschreibungsabschnitt. Links erscheinen unter der Beschreibung.

<figure><img src="/files/Jl1J9199PESW3AVs4fVp" alt=""><figcaption><p>Zusätzliche Skriptinformationen</p></figcaption></figure>

## Module und Befehle

Befehle und Cmdlets, die in Modulen enthalten sind, können als Ziel für Skripte verwendet werden, anstatt das Skript direkt zu schreiben.

Nehmen wir an, wir haben ein Modul namens `PSUModule`, das die folgende Funktion enthält.

```powershell
function Show-HelloWorld {
    param($Name)
    "Hello, $Name!"
}
```

Es ist möglich, diese Funktion als Skript verfügbar zu machen, indem die folgende Syntax in `scripts.ps1` verwendet wird.

```powershell
New-PSUScript -Module 'PSUModule' -Command 'Show-HelloWorld'
```

Die Funktion erscheint genau wie andere Skripte in der Verwaltungskonsole. Parameter, Hilfetexte und andere PSU-Funktionen funktionieren genauso wie bei Skripten.

## Statistiken

Anhand des Auftragsverlaufs eines Skripts stellt PowerShell Universal grundlegende Statistiken zur Ausführung des Skripts bereit. Dazu gehören die Erfolgsquote, die durchschnittliche Ausführungszeit sowie Aufschlüsselungen nach Umgebung, Benutzer und Computer der Ausführung.

<figure><img src="/files/8nIdFIQU2cpFfyzCeQyQ" alt=""><figcaption><p>Skriptstatistiken</p></figcaption></figure>

## Start-Job-Unterstützung

Es ist zwar möglich, Aufträge mit Invoke-PSUScript zu starten, dennoch kann es wünschenswert sein, einen Auftrag mit dem PowerShell-Cmdlet Start-Job zu starten. Bei Verwendung von Start-Job wird der Auftrag nicht bei PowerShell Universal registriert und die Ausführungsinformationen erscheinen nicht in der Auftragstabelle.

Die Umgebungen Integrated, PowerShell 7 und Windows PowerShell 5.1 sind nicht mit Start-Job kompatibel, da es sich um benutzerdefinierte PowerShell-Hosts handelt. Um Start-Job zu verwenden, müssen Sie eine benutzerdefinierte PowerShell-Umgebung konfigurieren. Klicken Sie auf Einstellungen \ Umgebungen. Klicken Sie anschließend auf Neue Umgebung erstellen. Benennen Sie die Umgebung, wählen Sie den Umgebungstyp Custom aus und geben Sie pwsh.exe als Pfad der ausführbaren Programmdatei an.

Sie können nun diese Umgebung verwenden, um das Cmdlet Start-Job auszuführen.

## API

* [New-PSUScript](/powershell-universal/de/powershell-befehle/new-psuscript.md)
* [Remove-PSUScript](/powershell-universal/de/powershell-befehle/remove-psuscript.md)
* [Set-PSUScript](/powershell-universal/de/powershell-befehle/set-psuscript.md)
* [Get-PSUScript](/powershell-universal/de/powershell-befehle/get-psuscript.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/automatisierung/scripts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
