C# 试图从C中调用PSCmdlet类#

C# 试图从C中调用PSCmdlet类#,c#,powershell,pscmdlet,C#,Powershell,Pscmdlet,起初,我试图简单地声明cmdlet的新实例,但出现了一个错误,表明我无法从cmdlet中调用pscmdlet类型的powershell cmdlet 为了做到这一点,我必须实例化Powershell引擎 PowerShell ps = PowerShell.Create(); ps.AddCommand("Get-Info"); 在我的例子中,如果我使用Get-Process,它可以正常工作,但是Get-Info,这是同一项目中的另一个PSCmdlet,它似乎不起作用 Get Name:术语“

起初,我试图简单地声明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引擎中


谢谢

我相信我已经找到了答案

您可以在Powershell.Create()之后添加以下内容:;以包含当前程序集

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

再次感谢您的帮助。

获取信息的定义在哪里?你能展示它吗?你正在cmdlet中创建新的powershell实例吗?@mikez是的,它在cmdlet中。但我得到的错误消息似乎是围绕一个模块路径。我想知道我是否调整了PSModulePath,这将修复它。@davidG,确定它是在同一个项目的名称空间中定义的。编辑此帖子以显示其位置。抱歉,各位。我想我找到了答案