Buscar..


Ejecutar Powershell con archivos temporales

Esto ha sido mencionado en otros temas híbridos una y otra vez. El método de la vieja escuela, pero fácil de ejecutar Powershell es por:

  • echo del script Powershell en un script temporal
  • Ejecutar el script temporal
  • Opcionalmente eliminar el script temporal.

Este es un script de ejemplo.

@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

El método anterior requiere toneladas de declaraciones de echo si se requiere un script largo, aquí hay un mejor método sugerido por @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

Use el comando POWERSHELL para ejecutar el comando Powershell de 1 línea

Usando el comando POWERSHELL , podemos ejecutar un comando de 1 línea directamente desde un script por lotes, sin ningún archivo temporal.


Aquí está la sintaxis.

powershell.exe -Command <yourPowershellCommandHere>

También es posible que desee incluir otras banderas, como -Nologo para mejorar el resultado real.

Powershell / batch híbrido sin archivos temporales

Este es el enfoque propuesto por el usuario rojo de stackoverflow que también puede manejar los argumentos de la línea de comando:

<# : 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++ }

llamado así:

psbatch.bat arg1 "Esto es arg2" arg3

Producirá:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow