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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow