Вызов метода с использованием IDispatch в PowerShell - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь связаться с приложением COM с помощью PowerShell. Когда я его создаю, я могу общаться с ним только через интерфейс IDispatch. Это само по себе интересно, потому что я могу рано связываться с ним в Visual Studio и общаться с ним «напрямую».

Когда я делаю:

$obj= New-Object -ComObject ComAssembly.Identifier # that's a made up name
$obj | gm

Я получаю только стандартные. Net вещи. Но я могу вызывать свойства, используя этот синтаксис:

$path = [System.__ComObject].InvokeMember('Path',[System.Reflection.BindingFlags]::GetProperty,$null,$obj,$null)

Это даст мне свойство Path.

Что я хочу сделать, это вызвать метод, который принимает два параметра (в в моем случае это строка и параметр $path). Я обнаружил, что общий способ вызова метода заключается в следующем:

$anotherthing = [System.__ComObject].InvokeMember('SomeMethod',[System.Reflection.BindingFlags]::InvokeMethod,$null,$cmc,<args>)

Мой вопрос: каков синтаксис для предоставления <args>? Я пытался просто передать их в качестве аргументов, это не работает.

1 Ответ

0 голосов
/ 12 апреля 2020

В данном конкретном случае, когда SomeMethod просто принимает два строковых аргумента, оборачивая их в массив, как предложила @CherryDT (спасибо), добилась цели:

$obj= New-Object -ComObject ComAssembly.Identifier # that's a made up name
$path = [System.__ComObject].InvokeMember('Path',[System.Reflection.BindingFlags]::GetProperty,$null,$obj,$null)
$anotherthing = [System.__ComObject].InvokeMember('SomeMethod',[System.Reflection.BindingFlags]::InvokeMethod,$null,$obj,@('SomeString', $path))
...