この質問を要約で紹介する方法に途方に暮れているので、説明ですぐに飛び込みます。
現在、さまざまな powershell コマンドの実行に依存する C# アプリケーションにいくつかの機能を実装しています。正確には、Windows Server 2012 の iSCSI ターゲット機能からサーバー ターゲットのリストを取得しようとしています。
PS コマンドはGet-IscsiServerTargetで、例として次の出力を返します。
Id : Server0.contoso.local:SQLTarget TargetName : SQLTarget TargetIqn : iqn.1991-05.com.microsoft:server0-sqltarget-target 説明 : 有効:真 ステータス:アイドル 最終ログイン: 1600/12/31 16:00:00 EnableChap : 偽 EnableReverseChap : 偽 コンピューター名: Server0.contoso.local MaxReceiveDataSegmentLength : 65536 FirstBurstLength : 65536 MaxBurstLength : 262144 受信バッファ数: 10 EnforceIdleTimeoutDetection : True InitiatorIds: {IPAddress:10.1.1.3} LunMappings : {TargetName:SQLTarget;WTD:2;LUN:0} バージョン: 3.3.16543 ServerInfo : Server0.contoso.local
パイプラインでコマンドを呼び出した後に返される PSObject コレクションは、Microsoft.Iscsi.Target.Commands.IscsiServerTargetオブジェクトのコレクションです。プリミティブ型であるすべてのプロパティにアクセスできるので、これはまったく問題ありません。私の問題は、LunMappingsのタイプがMicrosoft.Iscsi.Target.Commands.LunMappingであり、この特定のオブジェクトのプロパティにアクセスする方法が見つからないことです。
プロパティで ToString() を呼び出すと、"Microsoft.Iscsi.Target.Commands.LunMapping[]" に等しい文字列が返されますが、これは明らかに私が望んでいるものではありません。
心の中でやりたいことは
psobject[index].Properties["LunMappings"].Properties["Lun"]
また
((Microsoft.Iscsi.Target.Commands.LunMapping[])psobject[index].Properties["LunMappings"]).Lun
必要なアセンブリへの参照を配置した後、最後のものを試しましたが、コンパイル エラーが発生しました。
ガイダンス、指示、または建設的なコメントをいただければ幸いです。
編集
プロジェクトで Microsoft.Iscsi.Target.Commands.dll への参照を配置して、PSObject のキャストを許可する((Microsoft.Iscsi.Target.Commands.LunMapping[])psobject[index].Properties["LunMappings"]).Lun
と、コンパイル エラーが発生します - Error 4 The type or namespace name 'Iscsi' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
.
編集
この問題は現在修正されています。最初の編集でキャストしようとしたときに言及されたエラー 4 の問題は、プロジェクトが 3.5 フレームワークを対象としており、参照されているアセンブリに 4.0 が必要であるためです。これで、オブジェクトを正常にキャストできます。