从PSCmdlet类(C#)调用主机Powershell中的原始命令
我正在玩类PSCmdlet 是否有一种方法可以调用主机powershell中执行我的命令的命令 e、 g: 我想做一个函数来设置一些别名从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中使用的方法 要做到这一点,您需要一个声明如何调用它的方法
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();