Powershell - 将 COM 对象类型转换为字符串

问题描述 投票:0回答:2

几天前,我们从供应商处收到了这个用于我们业务应用程序的“新”COM 对象 dll(为什么不是 .NET 超出了我的能力)。由于极度缺乏文档(没有关于如何将 COM 对象集成到现有系统的示例或说明),我们一直在努力将其集成到我们现有的基础设施中。

这里我尝试使用Powershell访问COM对象类中名为“API”的方法并读取它返回的结果。该方法用于根据我们想要执行的操作调用各种 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
.net string powershell com
2个回答
3
投票

对我来说,您似乎正在尝试通过该调用获取 COM 对象 item 。可能你只需要使用COM来获取属性,你尝试过吗

$resultText = $resultSet.pb_resulttext

否则,我会在

Get-Member
上使用好的 ol'e
$resultSet
(也许还有
$resultText


0
投票

您可能需要知道结果对象的接口才能获取您想要的值。尝试使用 Windows SDK 中的 OleView.exe 来探索该库的接口,包括

colGeneric
clsGeneric
的接口。这应该为您提供有关
Item()
实际返回的类型的关键信息。

© www.soinside.com 2019 - 2024. All rights reserved.