PowerShell Skripte oder CmdLets lassen sich auch über eine Batchdatei (.cmd / .bat) ausführen. Das geht recht einfach und sogar Parameter können mit angegeben werden. Es muss lediglich auf korrekte gesetzte Quoten (Anführungszeichen) geachtet werden.
:: Variables set log="%temp%\Expand-Raw.log" :: Header echo Expand-Raw ... echo Expand-Raw ... >%log% echo. for /f "tokens=*" %%a in ('dir RAW*.zip /b') do ( rem PowerShell -NoExit "&" ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'" PowerShell ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'" echo [RC=%ERRORLEVEL%], PowerShell -NoExit "&" ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'" >>%log% ) :_End
Schauen wir uns das PowerShell-Skript genauer an, dann sehen wir das insgesamt 4 Parameter übergeben werden:
- -Action und die entsprechende Aktion, also –Action dis
- -File und Dateiname, also –File ‘RAW 2017-01-08-01, Huskies auf der Alb.zip’
Der Aufruf unter PowerShell (also nicht über eine Batch sieht wie folgt aus):
.\Distribute-Pictures.ps1 -Action dis -File 'RAW 2017-01-08-01, Huskies auf der Alb.zip'
Die Batch Datei, welche nun drum herum abläuft, soll das PowerShell-Skript einfach mehrfach für eine Reihe von Dateien im gleichen Verzeichnis ausführen. Darum erfolgt ein Aufruf von PowerShell.exe mit dem Script und den Parametern aus der Batch heraus.
PowerShell ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"
PowerShell ruft die PowerShell.exe auf, danach wird der vollständige Aufruf für PowerShell in normale Anführungszeichen gesetzt.
""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"
Innerhalb dieser Anführungszeichnen (“) steht dann das PowerShell-Script in weiteren Anführungszeichen, gefolgt von den Parametern. Der letzte Parameter, welcher den Dateinamen darstellt, wird in einfache Anführungszeichen (‘) gesetzt, da ihn PowerShell dann literal behandelt.
Enjoy it, b!