从PSCmdlet类(C#)在主机Powershell中调用原始命令

时间:2019-12-26 16:32:23

标签: c# powershell pscmdlet

我正在玩PSCmdlet类。

是否可以在执行命令的主机Powershell中调用命令?

例如:

我想做一个设置别名的功能。

public void myAliases() {
// Invoke Set-Alias in host ?
}

我尝试实例化Powershell.Create()AddCommand(),但对我不起作用。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用c#编写类库,并扩展PSCmdlet来创建可以直接在powershell中使用的方法。

要做到这一点,您将需要一个声明如何调用的方法

    [Cmdlet("Lookup", "Aliases")]
    public class LookupAliases: PSCmdlet 
    {

        [Parameter(Mandatory = true,
            ValueFromPipeline = false,
            ValueFromPipelineByPropertyName = false,
            ParameterSetName = "1",
            HelpMessage = "Indicates the help message")]
        public string FirstArgument{ get; set; }

        protected override void ProcessRecord()
        {
            // write your process here.
            base.ProcessRecord();
        }
    }

在powershell中,您将需要导入上面创建的dll(编译解决方案)并在powershell中运行

Lookup-Aliases -FirstArugment "value"

如果您希望在c#中运行powershell命令,

    Runspace runSpace = RunspaceFactory.CreateRunspace();
    runSpace.Open();

    Pipeline pipeline = runSpace.CreatePipeline();

    string script = "your powershell script here";
    pipeline.Commands.AddScript(script);

    Collection<PSObject> output = pipeline.Invoke();