Вызов API Vix из PowerShell - PullRequest
       41

Вызов API Vix из PowerShell

1 голос
/ 20 сентября 2011

Долговременное считывание стека, первый постер. Простите, если я не правильно задаю вопрос.

Я пытаюсь использовать API VixCOM с PowerShell. У меня нет большого опыта с этим. Мне известны VMWareTasks: библиотека и инструменты оболочки C # VixCOM . Я использовал его с успехом, но хотел бы использовать API VixCOM напрямую по причинам, в которые я не хочу сейчас вдаваться. В итоге я могу использовать оболочку 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?

1 Ответ

1 голос
/ 22 октября 2011

Кажется, что два последних типа параметров не совпадают.

Чтобы отобразить методы и типы параметров объекта, вызовите 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. Импортируйте Interop.VixCOM.dll, чтобы получить типы интерфейсов
2. Создайте новый класс, который наследуется от IVixHandle
3. Создайте новый класс, который наследуется от ICallback
4. Создайте два новых экземпляра каждого из двух новых классов
5. Передайте эти объекты методу Connect

Возможно, вам потребуется использовать командлет get-interfaces, находящийся на вкладке Обходные пути здесь:
https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=249840&SiteID=99

...