2011-07-11 42 views
1

幾天前,我們收到了來自供應商針對其中一個業務應用程序的此「新」COM對象dll(爲什麼不是.NET)。由於缺乏文檔(沒有關於如何將COM對象集成到現有系統的示例或說明),我們一直在努力將其集成到我們現有的基礎架構中。Powershell - 將COM對象類型轉換爲字符串

這裏我試圖使用Powershell來訪問COM對象類中名爲'API'的方法,並讀取它返回的結果。該方法用於根據我們想要執行的操作調用各種AP​​I。任何給定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 

回答

3

對我來說,你似乎試圖通過該調用獲取COM對象項目。可能是因爲你只需要使用COM來獲取該房產,你試過$resultText = $resultSet.pb_resulttext

否則,我會用好ol'e Get-Member$resultSet(也許$resultText

+1

$ resultText = $ resultSet.pb_resulttext返回任何不幸。但是,在$ resultText(get-member -inputobject $ resultText)上使用get-member給了我一個Com對象所有屬性的列表,其中一個叫做設置。嗯,我想..有趣..所以我開始用$ resultText = $ resultSet.Item([ref]「pb_resulttext」)替換代碼片段中的最後一個語句。值 而寫主機顯示預期的字符串值!!!!謝謝! – deutschZuid

+0

很高興能夠幫助:) 只是出於好奇,'$ resultSet | Get-Member'返回? –

+0

與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

0

你可能需要知道結果對象的接口來獲得你想要的值。嘗試使用Windows SDK中的OleView.exe來瀏覽庫的接口,包括colGenericclsGeneric的接口。這應該給你關於Item()實際返回的類型的關鍵信息。