2016-07-28 3 views
1

Я чрезвычайно новичок в PowerShell, но у меня много опыта C#. Я написал оболочку API в C#, и я хотел бы показать ее как командлеты PowerShell. Типичный поток в C# является довольно стандартным:Powershell Create Session Object

var client = new MyClient("username", "password"); 
var endpointData = client.GetSomeEndpointData(); 

Вопрос заключается в том, что такое правильный поток чего-то подобного в PowerShell и как сохранить его только для этой сессии. Я думаю, что это должно выглядеть примерно так.

Import-Module MyClient.dll 
New-MyClient "username" "password" 
Get-SomeEndpointData 

Так что мои вопросы

  1. Является ли это «правильный» поток что-то вроде этого
  2. Что это выглядит в C# код для создания командлетов, в частности
    1. как должен быть сохранен экземпляр MyClient для текущего сеанса PowerShell
    2. Как следуетЭкземплярможно получить в других командных командах, для которых требуется этот экземпляр?

Чтобы было ясно, мне не нужен сам код (примеры было бы неплохо), но мой Google-фу может быть просто не хватает сегодня. Документация MSDN (или эквивалент) будет достаточной.

+0

Объем 'MyClient' достаточно похож на ваш фон в' C# ', что я не предвижу бежишь в каких-либо проблем там в рамках существующей сессии. Если вы хотите, чтобы один и тот же экземпляр «MyClient» переносился на другие сценарии и т. Д., Зайдите в [Dot Sourcing] (http://ss64.com/ps/source.html). – gravity

+0

Имеет ли смысл подключаться к разным конечным точкам или использовать разные учетные данные в одном сеансе? Если это так, я бы подумал, что командлет New-MyClient вернет экземпляр «MyClient» (или подходящую обертку), на который пользователь будет вызывать методы. В противном случае вы обычно видите, что эти «окружающие» объекты хранятся в статических полях в некотором классе модуля. Командлеты в модуле просто ссылаются на статическое поле, чтобы получить все, что им нужно. –

ответ

1

Это будет выглядеть следующим образом:

Add-Type -Path 'c:\fullpath\to\myclient.dll' 
$client = New-Object MyClient("username", "password") 
$endpointData = $client.GetSomeEndpointData()