Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 27 Noviembre 2023, 00:12 am



Título: Enviar y recibir comandos con PowerShell
Publicado por: Meta en 27 Noviembre 2023, 00:12 am
Hola:

Quiero enviar dos comandos. Este es B<cr>. La letra B mayúscula y el retorno de carro. También quiero enviar otro comando por el puerto serie que es este, X72<cr>.

Una vez enviado el comando, su respuesta es trama de Bytes como este:

Comando B<cr>
Respuesta: #I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„<cr>

Tal como muestra aquí.
(https://i.postimg.cc/8c6c5W2p/RealTerm.jpg)

Simplemente eso. No estoy familiarizado en PowerShell y por algo se empieza.

Saludos.


Título: Re: Enviar y recibir comandos con PowerShell
Publicado por: elektrostudios2 en 21 Febrero 2024, 14:05 pm
El código que ya tienes elaborado en el lenguaje C# para cumplir con esa misma función, puedes compilarlo y usarlo directamente desde PowerShell, de manera similar a como usarías esa clase desde C#, aunque adaptando la sintaxis al entorno de PowerShell. Creo que esa solución te resultaría un procedimiento mucho más sencillo que crear el código desde cero usando exclusivamente PowerShell.

La metodología que permite escribir, compilar y ejecutar código de C# (y VB.NET) directamente desde un script de PowerShell, se realiza mediante el cmdlet Add-Type:

 - https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.utility/add-type (https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.utility/add-type)

Citar
El cmdlet Add-Type le permite definir una clase de .NET en la sesión de PowerShell. Seguidamente, puede crear instancias de objetos mediante el cmdlet New-Object y usar los objetos igual que usaría cualquier objeto de .NET. Si agrega un comando Add-Type al perfil de PowerShell, la clase está disponible en todas las sesiones de PowerShell.

A continuación comparto un artículo donde se detalla un ejemplo para C#:
 - https://dandraka.com/2018/11/12/powershell-how-do-you-add-inline-c/ (https://dandraka.com/2018/11/12/powershell-how-do-you-add-inline-c/)

Nota: no pases por alto usar el parámetro ReferencedAssemblies en el cmdlet Add-Type para incluir cualquier dependencia de la librería de clases de .NET al momento de compilar el código.

Te muestro un ejemplo propio con el uso del parámetro ReferencedAssemblies:

Código
  1. $csCode = @'
  2. using Microsoft.VisualBasic;
  3. using System;
  4.  
  5. namespace CSNamespace {
  6.  
  7.    public sealed class CSClass {
  8.  
  9.        public static bool CSFunction() {
  10.            return true;
  11.        }
  12.  
  13.    }
  14.  
  15. }
  16. '@
  17. $csType = Add-Type -TypeDefinition $csCode `
  18.                   -CodeDomProvider (New-Object Microsoft.CSharp.CSharpCodeProvider) `
  19.                   -PassThru `
  20.                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
  21.                                         "System.dll" `
  22.                                         | where { $_.IsPublic }
  23.  
  24. $csResult = [CSNamespace.CSClass]::CSFunction()


Aténtamente,
Elektro.