2011-07-11 60 views
1

数日後に私たちのビジネスアプリケーションのベンダーからこの新しい「COM」オブジェクトdll(なぜ.NETは私を超えていないのですか)を受け取りました。ドキュメントが極端にないため(COMオブジェクトを既存のシステムに統合する方法の例や説明はありません)、我々は既存のインフラストラクチャにCOMオブジェクトを統合するのに苦労してきました。Powershell - COMオブジェクトタイプを文字列に変換する

ここでは、Powershellを使用して、COMオブジェクトクラスの「API」というメソッドにアクセスし、それによって返された結果を読み取ろうとしています。このメソッドは、何をしたいかに応じてさまざまなAPIを呼び出すために使用されます。指定されたAPIのパラメータは、オブジェクト配列として渡されます。返される値は、colGenericというカスタムタイプに格納されます。このタイプは基本的にキー/値のペア(カスタムタイプclsGeneric)を持つ配列です。この場合、pb_resultとpb_resulttextの2つのペアが返されます。

$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) 

それでも、システム.__ ComObjectを返します。私がここで意味を成しているかどうかはわかりませんが、文字列形式の結果テキストが必要です。

UPDATEこのウェブサイト上の勤勉な人々へのおかげで、上記の問題に正解がでコードスニペットの最後のステートメントを置き換えることです:

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

答えて

3

私には、この呼び出しでCOMオブジェクトのアイテムを取得しようとしているようです。プロパティを取得するのにCOMを使用する必要があるだけかもしれません。$resultText = $resultSet.pb_resulttextを試してみましたか?

そうでなければ、私は

+1

$ resultText = $ resultSet.pb_resulttextが、残念ながら何も返されない$resultSet(そしておそらく$resultText)に良いol'e Get-Memberを使用すると思います。しかし、$ resultText(get-member -inputobject $ resultText)のget-memberを使用すると、Comオブジェクトのすべてのプロパティのリストが表示されました。そのうちの deutschZuid

+0

ニースを助けることができる:) ちょうど好奇心から、 '$ resultSet | Get-Member'リターン? –

+0

get-member -inputobject $ resultSetと同じです。 TypeName:System。__ComObject#{'prod_id'} 名前MemberType定義 ---- ---------- ---------- DataTypeプロパティstring DataType(){get} {set} フィールドプロパティ文字列フィールド(){get} {set} ParamTypeプロパティ文字列ParamType(){get} {set} 値プロパティバリアント値(){get} {set} – deutschZuid

0

あなたはおそらく知っている必要があります結果オブジェクトのインタフェースを使用して、必要な値を取得します。 Windows SDKのOleView.exeを使用して、colGenericおよびclsGenericを含むライブラリのインターフェイスを調べてみてください。それはItem()が実際に返すタイプに関する重要な情報を提供するはずです。

関連する問題