> For the complete documentation index, see [llms.txt](https://thorstenkramm.gitbook.io/saltstack/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thorstenkramm.gitbook.io/saltstack/salt-fuer-windows/powershell.md).

# PowerShell

PowerShell in Modulen (ad-hoc Kommandos) und States verwenden

### Module

Per Standard für Salt Kommandos, welche mit `cmd.run` „losgeschickt“ werden mit `cmd.exe` aus. Sie können entweder aus cmd.exe PowerShell aufrufen, oder die Shell Variable ändern. Siehe Beispiele:

```bash
salt '*' cmd.run 'powershell -Command "Get-Date"'
salt '*' cmd.run 'Get-Date' shell=powershell
salt '*' cmd.powershell 'Get-Date'
salt '*' cmd.run '$(Get-ComputerInfo).CsModel' shell=powershell
```

<figure><img src="https://3666581685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LFRZJPZX11pwB1staCp%2Fuploads%2Fw1fWtX83HSVYOXInSgvn%2Fimage.png?alt=media&amp;token=a6676ea2-78e0-4c7d-8e16-266dc9081973" alt=""><figcaption><p>Verschiedene PowerShell Optionen</p></figcaption></figure>

### State

Wenn Sie in einem State ein PowerShell Script ausführen möchten, müssen Sie ebenfalls die Variable `shell` auf `powershell` setzen.

{% code title="/src/salt/windows/pow\.sls" %}

```yaml
script:
  file.managed:
    - name: 'C:\Windows\Temp\reboot.ps1'
    - contents: |
        sleep 10
        Restart-Computer -Force

reboot:
  cmd.run:
    - name: Start-Process -NoNewWindow -FilePath "powershell" -ArgumentList "reboot.ps1" -WorkingDirectory "C:\Windows\temp"
    - shell: powershell
    - env:
      - ExecutionPolicy: bypass
    - user: Administrator

```

{% endcode %}

### Mehrzeilige PowerShell Script in States

Wenn Sie einen State auf einem Linux-System erstellen, versteht die PowerShell den Zeilenumbruch nicht. Ein State wie der Nachfolgende würde nur das erste Kommando auf der PowerShell ausführen und die Restlichen ignorieren.

```yaml
script:
  cmd.run:
    - name: |
        Get-Date
        Write-Host "Hallo Salt"
        Get-Date
        Write-Host "Hallo Salt"
    - shell: powershell
```

Dieses Problem können Sie umschiffen, indem die mit dem Yaml-Operator `>-` "[Folded Blocks](https://redocly.com/docs/yaml/blocks-and-flows#folded-blocks)" alles auf eine Zeile bringen lassen und dann explizit das Semikolon zum Abtrennen der Kommandos angeben.

```yaml
script:
  cmd.run:
    - name: >-
        Get-Date;
        Write-Host "Hallo Salt";
        Get-Date;
        Write-Host "Hallo Salt";
    - shell: powershell
```
