batch-file
Batchbestanden en Powershell-hybriden
Zoeken…
Voer Powershell uit met tijdelijke bestanden
Dit is steeds weer in andere hybride onderwerpen vermeld. De old-school, maar eenvoudige methode om Powershell te runnen is door:
-
echo
het Powershell-script in een tijdelijk script - Voer het tijdelijke script uit
- Verwijder optioneel het tijdelijke script
Dit is een voorbeeldscript.
@echo off
echo powershell-command>Temp.ps1
echo another line>>Temp.ps1
rem echo the script into a temporary file
powershell -File Temp.ps1
rem execute the temporary script
del Temp.ps1
rem Optionally remove the temporary script
De bovenstaande methode vereist heel veel echo
instructies als een lang script vereist is, hier is een betere methode voorgesteld door @Aacini
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > Temp.ps1
powershell -File Temp.ps1
del /f /s /q Temp.ps1
goto :EOF
<resource>
PS
Powershell script
Gebruik het POWERSHELL-commando om 1-regel Powershell-commando uit te voeren
Met behulp van de opdracht POWERSHELL
kunnen we een opdracht van 1 regel rechtstreeks vanuit een batchscript uitvoeren, zonder tijdelijk bestand.
Hier is de syntaxis.
powershell.exe -Command <yourPowershellCommandHere>
Misschien wilt u ook andere vlaggen opnemen, zoals -Nologo
om de daadwerkelijke uitkomst te verbeteren.
Powershell / batch hybride zonder tijdelijke bestanden
Dit is de benadering die wordt voorgesteld door de gebruiker rojo van de stackoverflow, die ook de opdrachtregelargumenten aankan:
<# : batch portion
@echo off & setlocal
(for %%I in ("%~f0";%*) do @echo(%%~I) | ^
powershell -noprofile "$argv = $input | ?{$_}; iex (${%~f0} | out-string)"
goto :EOF
: end batch / begin powershell #>
"Result:"
$argv | %{ "`$argv[{0}]: $_" -f $i++ }
zo genoemd:
psbatch.bat arg1 "Dit is arg2" arg3
zal produceren:
Result:
$argv[0]: C:\Users\rojo\Desktop\test.bat
$argv[1]: arg1
$argv[2]: This is arg2
$argv[3]: arg3