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

从PSCmdlet类(C#)调用主机Powershell中的原始命令,c#,powershell,pscmdlet,C#,Powershell,Pscmdlet,我正在玩类PSCmdlet 是否有一种方法可以调用主机powershell中执行我的命令的命令 e、 g: 我想做一个函数来设置一些别名 public void myAliases() { // Invoke Set-Alias in host ? } 我试图实例化Powershell.Create()和AddCommand()但对我无效 提前谢谢 您可以用c#编写类库,并扩展PSCmdlet以创建可直接在powershell中使用的方法 要做到这一点,您需要一个声明如何调用它的方法

我正在玩类PSCmdlet

是否有一种方法可以调用主机powershell中执行我的命令的命令

e、 g:

我想做一个函数来设置一些别名

public void myAliases() {
// Invoke Set-Alias in host ?
}
我试图实例化
Powershell.Create()
AddCommand()
但对我无效


提前谢谢

您可以用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();
Open();
Pipeline Pipeline=runSpace.CreatePipeline();
string script=“您的powershell脚本在此”;
pipeline.Commands.AddScript(脚本);
集合输出=pipeline.Invoke();

您是否正在尝试在c#中创建一个可在powershell中使用的方法?我想,代码位于表示powershell命令本身的PSCmdlet类中。我尝试创建一个方法来封装和执行原始命令,就像它们是在.psm1模块文件中定义的一样。这是一个很好的答案,谢谢。不可能在主机管道中执行相同的操作吗?执行命令的人。还没有运行空间实例吗?我的意思是,我认为我遇到了麻烦,因为我想要的是将指定为全局的别名设置为在我当前的powershell实例中使用。我可以使用psm1文件来完成相同的模块,我认为速度更快。但我想使用PSCmdlet来了解目的和限制,所以我就在这里。如果您为我的场景提供一些建议的话。谢谢
    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();