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