Estoy intentando crear un cmdlet en C#. El código es como la siguiente:PowerShell - Cómo importar-Módulo en un espacio de ejecución
[Cmdlet(VerbsCommon.Get, "HeapSummary")]
public class Get_HeapSummary : Cmdlet
{
protected override void ProcessRecord()
{
RunspaceConfiguration config = RunspaceConfiguration.Create();
Runspace myRs = RunspaceFactory.CreateRunspace(config);
myRs.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(myRs);
scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted");
Pipeline pipeline = myRs.CreatePipeline();
pipeline.Commands.Add(@"Import-Module G:\PowerShell\PowerDbg.psm1");
//...
pipeline.Invoke();
Collection<PSObject> psObjects = pipeline.Invoke();
foreach (var psObject in psObjects)
{
WriteObject(psObject);
}
}
}
Pero intentar ejecutar este cmdlet de PowerShell me da este error: El término módulo de importación no se reconoce como el nombre de un cmdlet. El mismo comando en PowerShell no me da este error. Si, en cambio, ejecuto 'Get-Command', puedo ver que 'Invoke-Module' aparece como CmdLet.
¿Hay alguna manera de hacer un 'Import-Module' en un Runspace?
Gracias!
Gracias! Pero el método Add() devuelve vacío. Supongo que necesita usar un objeto Command y agregarle un parámetro y pasarlo al método Add. Estás hablando de dos maneras de hacerlo programáticamente, ¿cuál es la segunda manera? – Absolom
oops, respuesta actualizada con la segunda forma. – x0n
También descubrí que si obtiene la excepción "Error de comprobación de AuthorizationManager" cuando intenta importar su módulo, asegúrese de que su archivo .psm1 esté guardado en UTF8 y no en ASCII. – Absolom