0

我正在玩 PSCmdlet 类。

有没有办法可以在执行我的命令的主机 powershell 中调用命令?

例如:

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

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

我试图举例Powershell.Create()AddCommand()但没有为我工作。

提前致谢!

4

1 回答 1

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();
于 2019-12-26T17:31:07.117 回答