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

State
Wenn Sie in einem State ein PowerShell Script ausführen möchten, müssen Sie ebenfalls die Variable shell
auf powershell
setzen.
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