1

私はこれに数時間ぶつかり続けており、誰かが私を正しい方向に向けるのを手伝ってくれることを望んでいます。

いくつかのカスタムPowerShellコマンドレットを開発しており、サポートするクラスの1つはUserオブジェクトです。私のコマンドレットのいくつかは、Listを発行または消費します。

これはこれまでのところ非常にうまく機能していますが、リストの1つをシリアル化しようとすると、深刻な問題にぶつかりました。エクスポートは正常に機能しているようです。ファイル(csv、clixmlなど)を見ると、Userタイプで期待どおりに見えます。ただし、再インポートすると、タイプがCSV:Class.UserまたはDeserialized.Class.Userに変更されたようです。明らかに、これは、標準のUserクラスを期待するコマンドレットにフィードされたときに問題を引き起こします。

これを修正する良い方法があれば?リストではなくインターフェイスを期待するようにコマンドレットを変更すると、おそらくうまくいくのではないかと思いましたが、どのインターフェイスを使用すべきかわかりません。そして、クラス名を指定するためのインポートメソッドへの切り替えが見つかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

3

PowerShell の拡張型システムへようこそ。:-) ところで、オブジェクトがリモート セッションを介して渡されると、状態のみのデシリアライズされたオブジェクトも返されます。PSObject の TypeNames コレクションにクエリを実行して Deserialized.Class.User を検索し、型の逆シリアル化バージョンがあるかどうかを判断できます。CSV版も同様です。User クラスにいくつかのファクトリ メソッドまたはクローン スタイル コンストラクターを作成して、ある種の User (CSV または Deserialized) である PSObject を受け取り、通常の Class.User オブジェクトを作成することができます。逆シリアル化の場合、特定の操作が意味をなさない場合があることに注意してください。たとえば、Process オブジェクトを例として使用すると、Process オブジェクトで Kill を呼び出すことができます。オブジェクトが同じマシンからのものである場合は、(正しい特権を前提として) 動作します。でも、deserialized主に単なるデータ (プロパティ) コンテナーであるオブジェクト。

于 2012-09-24T20:05:15.633 に答える