Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: reconFito en 22 Abril 2024, 21:41 pm



Título: [RESUELTO][PowerShell] Ejecución de código PowerShell dentro de archivo Batch
Publicado por: reconFito en 22 Abril 2024, 21:41 pm
Buenas, saludos a todos.
Tengo una consulta con referencia a la primera línea del script a continuación, ¿Quisiera saber de qué manera está siendo interpretada por el prompt de CMD?
Y como es posible que funcione, ya que si quito el espacio que se encuentra entre # y : el script deja de funcionar. Cualquier explicación que me puedan brindar se las agradecería.

Código
  1. <# :
  2. @echo off
  3. PowerShell.exe -c "iex $([System.IO.File]::ReadAllText('%~f0'))"
  4. goto:EOF
  5. #>
  6. write hello
  7.  

Gracias


Título: Re: [DUDA][PowerShell] Ejecución de código PowerShell dentro de archivo Batch
Publicado por: EdePC en 23 Abril 2024, 03:08 am
Yo tengo entendido de que es por un comportamiento raro de los tantos que tiene Batch, en tu caso el redireccionador < siempre se "mueve" o ejecuta al final, para batch estás intentando redireccionar el contenido del archivo # para que sea procesado por el comando :, : sirve para poner etiquetas o comentar instrucciones, al final para batch quedaría así:

Código
  1. :<#

Se termina comentando a sí misma y no hace nada XD, aunque en realidad se convierte en una etiqueta, quizá sea mejor usar :: en lugar de : pero como no va a entrar en conflicto con otra posible etiqueta ni se la está llamando no debería haber problemas. Yo pienso que es así porque hay una técnica para hacer un Echo sin el salto de línea final:

Código
  1. <Nul Set/P="Hola mundo"

Lo lógico sería pensar en que primero se ejecuta set/p="Hola mundo" y luego para evitar interacción entra en juego <nul haciendo que set/p trabaje como un simple Echo sin salto de línea, además es completamente equivalente a:

Código
  1. Set/P="Hola mundo" <nul

El espacio entre # y : es necesario porque sirve de separador entre el redireccionador+nombreDeArchivo (<#) del comando :, si están juntos es equivalente a no poner el comando y dará error

Doy por hecho de que no tienes problemas con las formas de comentarios de PowerShell

---
Por cierto, puedes reducir más el script combinando los tantos métodos de PowerShell Batch wrapper que hay en línea, por ejemplo este:

Código
  1. # & @Cls & PowerShell gc '%~f0'^|iex & Exit/B
  2. write hello

Para este caso Batch piensa que # es un comando o programa pero como no existe da una advertencia/error que desaparece inmediatamente con el @Cls, útil este método si la intención del Batch es únicamente llamar a PowerShell junto con toodas sus instrucciones y nada más, y está demás decir que para PowerShell # implica un comentario de una sola línea


Título: Re: [DUDA][PowerShell] Ejecución de código PowerShell dentro de archivo Batch
Publicado por: reconFito en 23 Abril 2024, 07:06 am
Gracias por tú respuesta, entendí algo de tú explicación, voy a investigar un poco más al respecto, pero por el momento me basta.

Ahora que ya se buscar (Powershell Batch Wrapper) creo que será más fácil, por cierto conoces algunos recursos donde pueda profundizar en este tipo de temas y trucos en CMD y Powershell, se que aquí tienen recursos pero nunca esta demás complementar con otras fuentes.

Gracias nuevamente.