我正在玩PSCmdlet类。
是否可以在执行命令的主机Powershell中调用命令?
例如:
我想做一个设置别名的功能。
public void myAliases() {
// Invoke Set-Alias in host ?
}
我尝试实例化Powershell.Create()
和AddCommand()
,但对我不起作用。
谢谢!
答案 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();