试图从C#中调用PSCmdlet类

时间:2014-10-14 00:10:39

标签: c# powershell pscmdlet

首先,我尝试简单地声明一个新的cmdlet实例,但是出现了一个错误,表明我无法从cmdlet中调用pscmdlet类型的powershell cmdlet。

为了做到这一点,我必须实例化Powershell引擎。

PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Info");

在我的情况下,如果我使用Get-Process,那可以正常工作,但Get-Info,这是同一个项目中的另一个PSCmdlet似乎无法工作。

  

Get-Name:术语' Get-Info'不被识别为cmdlet的名称,   功能,脚本文件或可操作程序。检查拼写   名称,或者如果包含路径,请验证路径是否正确   再试一次。

我可以从powershell窗口手动调用get-info,但不能从我的代码中调用。

这可能与模块路径有关吗?或者因为我的模块没有加载到这个新实例化的引擎中?

如果是这样,我如何让新引擎加载模块?

以下是如何定义get-info

namespace APICLI
{
[Cmdlet(VerbsCommon.Get, "Info")]
public class GetInfo : PSCmdlet

调用powershell.create()的cmdlet是get-name

namespace APICLI
{
[Cmdlet(VerbsCommon.Get, "Name")]
public class GetName : PSCmdlet

理念是get-info获取与某个对象相关的所有内容,但您可以使用get-name来获取特定信息。

我希望用它来创建更小的更受限制的cmdlet,只需调用get-info。

但我认为它与路径有关,因为我的项目没有导入到在get-name中实例化的新创建的PowerShell引擎。

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信我已经找到了答案

Hosted PowerShell cannot see Cmdlets in the same Assembly

您可以在Powershell.Create()之后添加以下内容;包括你当前的集会。

        PowerShell ps = PowerShell.Create();
        ps.AddCommand("Import-Module").AddParameter("Assembly", System.Reflection.Assembly.GetExecutingAssembly());
        ps.Invoke();
        ps.Commands.Clear();

再次感谢您的协助。