2014-10-14 2 views
0

Сначала я попытался просто объявить новый экземпляр командлета, но получил сообщение об ошибке, которое указывало, что я не мог вызывать командлеты powershell типа pscmdlet из командлета.Пытается вызвать класс PSCmdlet из C#

Для этого мне нужно создать экземпляр двигателя Powershell.

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

В моем случае, если я использую Get-Process, который работает просто отлично, но Get-Info, который является еще PSCmdlet в том же проекте, кажется, не работает.

Get-Name: Термин 'Get-Info' не распознается как имя командлета, функции, файла сценария или исполняемой программой. Проверьте правильность написания имени или если был указан путь, убедитесь, что путь правильный, а попробуйте снова.

Я могу вызвать get-info вручную из окна powershell, но не из моего кода.

Возможно, это связано с модулем? или потому что мой модуль не загружен в этот новый экземпляр двигателя?

если да, то как мне получить новый двигатель для загрузки модуля?

Вот как получить-инфо определяется

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

командлета, звонит powershell.create(), это получить имя

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

Идея заключается в том, что получить-инфо получает все, что относится к определенному объекту, но вы можете использовать get-name для получения конкретной информации.

Я надеялся использовать это, чтобы создать более мелкие более ограниченные командлеты, которые просто вызывают get-info.

но я думаю, что это связано с путём, так как мой проект не импортируется во вновь созданный движок powershell, созданный в get-name.

спасибо!

+0

Где определяется информация для получения информации? вы можете это показать? – DavidG

+0

Создаете ли вы новый экземпляр powershell в командлете? –

+0

@mikez Да, это в командлете. Но сообщение об ошибке, которое я получаю, похоже, находится вокруг пути к модулю. Интересно, настраиваю ли я свой PSModulePath, который исправит его. – anoopb

ответ

0

Я считаю, что я нашел ответ на

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(); 

Еще раз спасибо за помощь.

Смежные вопросы