0

c#を使用してPowerShellコマンドレットを実行し、コマンドレットの結果(Collection[]。Properties["PropertyName"]。value)を解析して必要な値を取得しています。

ただし、一部の結果には、逆シリアル化されたオブジェクトのリストが含まれています。しかし、PowerShellはこれらをオブジェクトのArrayListに変換しているだけであり、それらのすべてのプロパティを取得することはできません。

例:Exchange管理シェルコマンドレットのGet-MailboxDatabaseは、Exchangeサーバー(コレクション)上のメールボックスデータベースのリストを返します。PSObject.Properties["PropertyName"]。Valueから名前やサーバーなどのプロパティを取得できます。

また、データベースコピーのリストも含まれています(以下のようなもの)

class MailboxDatabase {DatabaseCopy [] DatabaseCopies; }

PSObject.Properties["DatabaseCopies"]。ValueはオブジェクトのarrayListに他なりません。

ただし、すべてのDatabaseCopyプロパティが逆シリアル化されているわけではありません(または、それらを取得する方法がわかりません)。

名前(配列リストのリストからのDatabaseCopyの文字列)しか表示できません。

複数値の結果のすべての逆シリアル化されたプロパティを取得する方法を教えてもらえますか?

詳細については、次を参照してください:C#でプログラム的にMailboxDatabaseからDatabaseCopiesを取得する方法(C#でラップされたExchangeMangementShellコマンドレット)?

よろしく、ドリーマー

4

2 に答える 2

0

PowerShell からでも、それらはプレーンな文字列として提供されます。

PS C:\> $md.type
PS C:\> $md.DatabaseCopies.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ArrayList                                System.Object


PS C:\> $md.DatabaseCopies[0].gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

PS C:\> $md.gettype()
Method invocation failed because [Deserialized.Microsoft.Exchange.Data.Directory.SystemConfiguration.MailboxDatabase] doesn't contain a method named 'gettype'.

というわけで、仕方がないようです。ユースケースの回避策を探します。

于 2013-02-03T06:42:36.767 に答える
0

コマンドレットは、PSObject または PSObject のリストを返す必要があります。

DatabaseCopies はシリアル化されておらず、プレーンな文字列に設定されているだけだと思います。そのため、デシリアライズできません。

于 2013-02-05T23:46:57.933 に答える