2016-07-28 68 views
1

我對PowerShell非常陌生,但我有很多C#經驗。我在C#中編寫了一個API封裝器,我想將它公開爲PowerShell Cmdlet。在C#中的典型流程是一個相當標準:Powershell創建會話對象

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

的問題是,究竟是什麼在PowerShell中這樣的事情,以及如何堅持只爲會議的正常流動。我認爲它應該看起來像下面這樣。

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

所以我的問題是

  1. 難道這東西「正確的」流這樣
  2. 是什麼樣子的C#代碼創建的cmdlet,具體
    1. MyClient實例如何在當前的PowerShell會話中持久化
    2. MyClient實例在需要該實例的其他Cmdlet中訪問?

要清楚,我並不需要實際的代碼(示例將是很好的),但我的谷歌福可能只是今天欠缺。 MSDN文檔(或同等)就足夠了。

+0

MyClient'的'範圍是你在'C#'我不預見在運行到現有會話中的任何問題有足夠的背景相似。如果您希望將「MyClient」的相同實例轉化爲其他腳本等,請查看[Dot Sourcing](http://ss64.com/ps/source.html)。 – gravity

+0

想要連接到不同的端點或在同一個會話中使用不同的憑據是否有意義?如果是這樣,我會認爲cmdlet New-MyClient會返回一個用戶調用方法的'MyClient'(或合適的包裝器)實例。否則,您通常會在模塊的某些類中看到這些「環境」對象存儲在靜態字段中。模塊中的cmdlet只是引用該靜態字段來獲取他們需要的任何內容。 –

回答

1

它會看起來像這樣:

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