2011-09-20 54 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包装库。此外,我已转到其他项目,所以我无法验证此答案是否适用于我的方案。不过,我会将其标记为答案,因为这是我知道的唯一合理解决方案。 –