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:

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
Verschiedene PowerShell Optionen

State

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

/src/salt/windows/pow.sls
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

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.

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" alles auf eine Zeile bringen lassen und dann explizit das Semikolon zum Abtrennen der Kommandos angeben.

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

Last updated