数日後に私たちのビジネスアプリケーションのベンダーからこの新しい「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
$ resultText = $ resultSet.pb_resulttextが、残念ながら何も返されない
deutschZuid
$resultSet
(そしておそらく$resultText
)に良いol'eGet-Member
を使用すると思います。しかし、$ resultText(get-member -inputobject $ resultText)のget-memberを使用すると、Comオブジェクトのすべてのプロパティのリストが表示されました。そのうちのニースを助けることができる:) ちょうど好奇心から、 '$ resultSet | Get-Member'リターン? –
get-member -inputobject $ resultSetと同じです。 TypeName:System。__ComObject#{'prod_id'} 名前MemberType定義 ---- ---------- ---------- DataTypeプロパティstring DataType(){get} {set} フィールドプロパティ文字列フィールド(){get} {set} ParamTypeプロパティ文字列ParamType(){get} {set} 値プロパティバリアント値(){get} {set} – deutschZuid