2011-09-20 55 views
0

長時間堆棧溢出讀者,第一次張貼海報。如果我沒有正確地提出問題,請原諒我。從PowerShell調用Vix API

我正在嘗試在PowerShell中使用VixCOM API。我也沒有太多的經驗。我知道VMWareTasks: C# VixCOM wrapper library & tools。我已經成功地使用了它,但是由於我目前不想進入的原因,我想直接使用VixCOM API。我最終可能會使用VMWareTasks包裝器,但在嘗試瞭解手頭的問題時感到幽默。

我的腳本是:

$vixLib = New-Object -ComObject VixCOM.VixLib 
$job = $vixLib.Connect(-1, 10, "https://esx-server/sdk", 0, "admin", "password", 0, $null, $null) 

當我運行從PowerCLI的這個劇本,我得到一個錯誤:

Exception calling "Connect" with "9" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))" 
At D:\dev\PowerShell\Automated Deploy\UsingVixCOM.ps1:11 char:23 
+ $job = $vixLib.Connect <<<< (-1, 10, "https://esx-server/sdk", 0, "admin", "password", 0, $null, $null) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 
  • 哪個參數導致類型不匹配?
  • 調用Connect方法的正確方法是什麼?

回答

0

看起來最後兩個參數類型不匹配。

要顯示一個對象的方法和參數類型調用Get-Member cmdlet的是這樣的:

$vixLib = New-Object -ComObject VixCOM.VixLib 

$vixLib | get-member 

返回:

TypeName: System.__ComObject#{94eaa428-2460-470d-8f66-2a4270aff20a} 

Name     MemberType Definition 
----     ---------- ---------- 
Connect    Method  IJob Connect (int, int, string, int, string, string, int, IVixHandle, ICallback) 

然後您可以嘗試:
1.導入互操作。 VixCOM.dll獲取接口類型
2.創建一個繼承自IVixHandle的新類
3.創建一個新的類t帽子從ICallback繼承
4.創建每兩個新類
5的兩個新實例傳遞這些對象的連接方法

您可能需要使用的解決辦法標籤上發現這裏的得到的接口cmdlet的:
https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=249840&SiteID=99

+0

哇,我不知道有人回答。在大約一週沒有迴應後,我辭職了C#VixCOM包裝庫。此外,我已轉到其他項目,所以我無法驗證此答案是否適用於我的方案。不過,我會將其標記爲答案,因爲這是我知道的唯一合理解決方案。 –