几天前,我们收到了来自供应商针对其中一个业务应用程序的此“新”COM对象dll(为什么不是.NET)。由于缺乏文档(没有关于如何将COM对象集成到现有系统的示例或说明),我们一直在努力将其集成到我们现有的基础架构中。Powershell - 将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。不知道我在这里是否有意义,但我只需要字符串形式的结果文本。
UPDATE多亏了勤政为民这个网站上,正确解决了上述问题,以取代最后一条语句中的代码片段:
$resultText = $resultSet.Item([ref] "pb_resulttext").Value
$ resultText = $ resultSet.pb_resulttext返回任何不幸。但是,在$ resultText(get-member -inputobject $ resultText)上使用get-member给了我一个Com对象所有属性的列表,其中一个叫做设置。嗯,我想..有趣..所以我开始用$ resultText = $ resultSet.Item([ref]“pb_resulttext”)替换代码片段中的最后一个语句。值 而写主机显示预期的字符串值!!!!谢谢! –
deutschZuid
很高兴能够帮助:) 只是出于好奇,'$ resultSet | Get-Member'返回? –
与get-member -inputobject相同$ resultSet TypeName:System。__ComObject#{'prod_id'} Name MemberType定义 ---- ---------- ---------- DataType属性string DataType(){get} {set} 字段属性字段字段(){get} {set} ParamType属性字符串ParamType(){get} {set} Value属性Variant Value(){get} {set} {set by ref} – deutschZuid