首先,我尝试简单地声明一个新的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引擎。
谢谢!
答案 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();
再次感谢您的协助。