Powershell - преобразование типа COM-объекта в строку - PullRequest
1 голос
/ 11 июля 2011

Несколько дней назад мы получили этот «новый» COM-объект DLL (почему не .NET за мной) от поставщика для одного из наших бизнес-приложений. Из-за крайней нехватки документации (нет примеров или инструкций о том, как интегрировать COM-объект в существующую систему), мы изо всех сил пытались интегрировать его в нашу существующую инфраструктуру.

Здесь я пытаюсь использовать Powershell для доступа к методу, называемому «API», в классе объектов COM и для чтения результатов, возвращаемых им. Метод используется для вызова различных API в зависимости от того, что мы хотим сделать. Параметры для любого данного API передаются как массив объектов. Возвращаемое значение сохраняется в пользовательском типе colGeneric, который по сути является массивом с парами ключ / значение (с пользовательским типом clsGeneric). В этом случае он возвращает две пары - pb_result и pb_resulttext.

$comClass = new-object -comObject VendorCOM.VendorClass
$APIName = "SomeAPI"
$ArrayOfParamsNeededByAPI = 12345, "ABC", "2011-08-01"

$resultSet = $comClass.API([REF] $APIName, [REF] $ArrayOfParamsNeededByAPI)

$resultText = $resultSet.Item([ref] "pb_resulttext")

Когда я пытаюсь распечатать $ clsGenObjResultText, он отображается как System .__ ComObject. Я знаю, что это строка, но попытки конвертировать в строку пока не увенчались успехом. Вот одна вещь, которую я пробовал:

[System.Convert]::ToString($resultText)

Не работает, так как возвращает System .__ ComObject. Не уверен, что здесь есть смысл, но мне нужен только текст результата в виде строки.

ОБНОВЛЕНИЕ Благодаря старательным людям на этом сайте, правильное решение вышеуказанной проблемы состоит в замене последнего утверждения в фрагменте кода на:

$resultText = $resultSet.Item([ref] "pb_resulttext").Value

Ответы [ 2 ]

3 голосов
/ 11 июля 2011

Мне кажется, вы пытаетесь получить COM-объект item с этим вызовом. Может быть, вам просто нужно использовать COM, чтобы получить свойство, вы пробовали $resultText = $resultSet.pb_resulttext?

В противном случае, я бы использовал доброе старое Get-Member на $resultSet (и, возможно, $resultText)

0 голосов
/ 11 июля 2011

Вам, вероятно, понадобится знать интерфейс результирующего объекта, чтобы получить желаемое значение. Попробуйте использовать OleView.exe из Windows SDK для изучения интерфейсов библиотеки, включая интерфейсы colGeneric и clsGeneric. Это должно дать вам ключевую информацию о типе, который на самом деле возвращает Item().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...