0

我正在使用 c# 执行 PowerShell cmdlet 并解析 cmdlet 结果 (Collection[].Properties["PropertyName"].value) 以获得所需的值。

但有些结果包含反序列化对象的列表。但是 PowerShell 只是将这些转换为对象的 ArrayList,我无法获取它们的所有属性。

例如:Exchange 命令行管理程序 cmdlet 的 Get-MailboxDatabase 返回 Exchange 服务器上的邮箱数据库列表(集合)。我可以从 PSObject.Properties["PropertyName"].Value 中获取名称、服务器等属性。

它还包含一个数据库副本列表(如下所示)

类 MailboxDatabase { DatabaseCopy[] DatabaseCopies; }

PSObject.Properties["DatabaseCopies"].Value 只不过是一个对象数组列表。

但是所有 DatabaseCopy 属性都没有反序列化(或者我不确定如何获取它们)。

我只能看到名称(来自数组列表的 DatabaseCopy 的字符串)。

谁能帮助我如何获得多值结果的所有反序列化属性?

有关更多详细信息,您可以查看:How to get DatabaseCopies from MailboxDatabase programmatically in C# (wrapped ExchangeMangementShell cmdlet in c#)?

问候,梦想家

4

2 回答 2

0

cmdlet 应返回 PSObject 或 PSObject 列表。

我认为 DatabaseCopies 没有序列化,只是设置为纯字符串。所以它们不能被反序列化。

于 2013-02-05T23:46:57.933 回答
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 回答