Contenidos
- Crear un proyecto en Visual C# Biblioteca de Clase (.NET Framework)
- Importar desde Microsoft Visual C# la referencia al ensamblado System.Management.Automation (C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll)
- Añadir el siguiente código en PowerShell a Visual Studio C# y compilar la solución (crear dos métodos que abran Notepad y Paint)
- Compilar la solución y buscar la dll compilada que se encuentra en la carpeta bin (C:\Users\juan\source\repos\ClassLibrary3\ClassLibrary3\bin\Debug)
- Llamar a la dll creada desde PowerShell mediante la invocación a los dos métodos creados
Una biblioteca de enlace dinámico (DLL, por la sigla en inglés de dynamic-link library) es el término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa por parte del sistema operativo. Esta denominación es exclusiva a los sistemas operativos Windows siendo «.dll» la extensión con la que se identifican estos ficheros, aunque el concepto existe en prácticamente todos los sistemas operativos modernos.
Crear un proyecto en Visual C# Biblioteca de Clase (.NET Framework)

Importar desde Microsoft Visual C# la referencia al ensamblado System.Management.Automation (C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll)
PowerShell Class Representa un comando o secuencia de comandos de PowerShell para ejecutar en un Runspace (Pool) si se proporciona; de lo contrario, ejecute usando un Runspace predeterminado. Proporciona acceso a diferentes búferes de resultados como salida, error, depuración, detallado, progreso, advertencia e información.

Añadir el siguiente código en PowerShell a Visual Studio C# y compilar la solución (crear dos métodos que abran Notepad y Paint)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System.Management.Automation; // Windows PowerShell namespace. namespace ClassLibrary3 { public class Class1 { public static void AbrirNotepad() { //Create a PowerShell object. PowerShell ps = PowerShell.Create(); //Add the command that you want to execute. ps.AddCommand("Start-Process"); //Add the argument ps.AddArgument("notepad"); //Invoke the command. ps.Invoke(); } public static void AbrirPaint() { //Create a PowerShell object. PowerShell ps = PowerShell.Create(); //Add the command that you want to execute. ps.AddCommand("Start-Process"); //Add the argument ps.AddArgument("mspaint"); //Invoke the command. ps.Invoke(); } } } |
Compilar la solución y buscar la dll compilada que se encuentra en la carpeta bin (C:\Users\juan\source\repos\ClassLibrary3\ClassLibrary3\bin\Debug)

Llamar a la dll creada desde PowerShell mediante la invocación a los dos métodos creados
1 2 3 4 5 6 7 8 9 |
$carga = [Reflection.Assembly]::LoadFile("C:\Users\juan\source\repos\ClassLibrary3\ClassLibrary3\bin\Debug\ClassLibrary3.dll") # Ver el nombre de los métodos declarados $carga | select ExportedTypes [ClassLibrary3.Class1].DeclaredMethods.Name [ClassLibrary3.Class1]::AbrirNotepad() [ClassLibrary3.Class1]::AbrirPaint() |