batch-file
Batchfiler och Powershell-hybrider
Sök…
Kör Powershell med tillfälliga filer
Detta har nämnts i andra hybrid ämnen och om igen. Den gamla skolan, men lättmetoden att köra Powershell är av:
-
echo
ekar in Powershell-manuset till ett tillfälligt manus - Kör det tillfälliga skriptet
- Ta bort det temporära skriptet
Detta är ett exempelskript.
@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
Metoden ovan kräver massor av echo
uttalanden om ett långt skript krävs, här är en bättre metod föreslås av @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
Använd POWERSHELL-kommandot för att utföra 1-rad Powershell-kommando
Med hjälp av POWERSHELL
kommandot kan vi köra ett 1-rads kommando direkt från ett batchskript utan någon tillfällig fil.
Här är syntaxen.
powershell.exe -Command <yourPowershellCommandHere>
Du kanske också vill inkludera andra flaggor, som -Nologo
att förbättra det faktiska resultatet.
Powershell / batch-hybrid utan temp-filer
Detta är den metod som föreslås av Stackoverflow användar Rojo som också kan hantera kommandoradsargumenten:
<# : 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++ }
kallas så här:
psbatch.bat arg1 "Detta är arg2" arg3
kommer att producera:
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow