> 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

Erstellen und konfigurieren Sie PowerShell-Skripte in PowerShell Universal – behandelt werden Parameter, Run-As-Anmeldeinformationen, kommentarbasierte Hilfe und Auftragsstatistiken.

Sie können PowerShell-Skripte innerhalb von PowerShell Universal erstellen, um sie manuell, nach einem Zeitplan oder beim Auftreten von Ereignissen innerhalb der Plattform auszuführen. Sie werden auf der Festplatte gespeichert und in einem lokalen oder remote Git-Repository persistiert.

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

## Ein neues Skript hinzufügen

Um ein neues Skript hinzuzufügen, klicken Sie unter **Build > Scripts** auf die Schaltfläche New Script. Es gibt verschiedene Einstellungen, die Sie für das Skript angeben können.

## Skript-Optionen

### **Name**

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

### Modul und Befehl

Siehe [Modules and Commands](#modules-and-commands) unten.

### **Description**

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

### **Disable Manual Invocation**

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 Job History**

Der maximale Auftragsverlauf definiert die Anzahl der gespeicherten Aufträge bei der Ausführung dieses Skripts. Der Standardwert ist 100. Aufträge werden außerdem basierend auf der serverweiten Einstellung zur Aufbewahrungsdauer von Aufträgen unter **Settings gear > Data** bereinigt.

### **Error Action**

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 Handhabung des Skripts zu verändern (zum Beispiel in einem Ausnahmehandler), verwenden Sie `Write-PSUError`, um den Fehlerdatensatz auszugeben; er erscheint dann in der Fehler-Registerkarte des Auftrags.

### **Environment**

Damit können Sie die erforderliche PowerShell-Umgebung für das Skript definieren. Standardmäßig wird die serverweite Standard-PowerShell-Umgebung verwendet. PowerShell-Umgebungen werden beim ersten Start des Universal Servers automatisch ermittelt oder aus der Datei `environments.ps1` gelesen. Sie können eine Umgebung auch unter **Manage > Environments > Environments** 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 von Aufträgen erheblich, aber das Skript schreibt weiterhin in die Informations-, Warnungs- und Fehlerströme.

### **Concurrent Jobs**

Definiert die maximale Anzahl gleichzeitiger Aufträge, 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 Execution Roles können Sie festlegen, welche Rollen bei der Ausführung des Skripts zugewiesen werden. Standardmäßig wird das Skript basierend auf den Rollen des Aufrufers ausgeführt. In manchen 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, haben sie keine Rollen; die Bereitstellung über Execution Roles ermöglicht daher die Verwendung von Secret-Variablen mit Rollen im geplanten Skript.

## Ein Skript ausführen

Sie können ein Skript in der Benutzeroberfläche unter **Build > Scripts** ausführen, indem Sie auf Run klicken oder auf View und dann auf Run. In beiden Fällen erscheint der Run-Dialog, in dem Sie verschiedene Einstellungen für den Auftrag auswählen können.

### Ein Skript mit Parametern ausführen

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

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

Zum Beispiel könnten Sie 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.

### Ein Skript als ein 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 ein 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.

Öffnen Sie **Manage > Variables & Secrets > Variables**, klicken Sie auf Create Secret und 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.

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

Navigieren Sie zurück zu **Build > Scripts** und klicken Sie auf die Schaltfläche Run Script. 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.

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

Sie können das Dropdown-Menü Computer verwenden, um andere Maschinen 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 All Computers 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 belasteten 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 Kurzbeschreibung, 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://devolutions.net/powershell-universal/
#>
param($HostName)

Test-NetConnection $HostName
```

Das oben Genannte ergibt eine Benutzeroberfläche, in der die Kurzbeschreibung als kurze Beschreibung angezeigt wird und eine längere Beschreibung im Beschreibungsabschnitt erscheint. Links erscheinen unterhalb der Beschreibung.

## 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 erstellen.

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 Sie die folgende Syntax in `scripts.ps1` verwenden.

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

Die Funktion erscheint genau wie andere Skripte innerhalb der Administrationskonsole. Parameter, Hilfetext und andere PSU-Funktionen funktionieren genauso wie bei Skripten.

## Statistiken

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

## Start-Job-Unterstützung

Es ist zwar möglich, Aufträge mit Invoke-PSUScript zu starten, es kann jedoch 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 sind nicht in der Auftragstabelle vorhanden.

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. Öffnen Sie **Manage > Environments > Environments**, klicken Sie auf Create New Environment, wählen Sie den Umgebungstyp Custom aus und geben Sie pwsh.exe als Pfad zur 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.
