0

我正在使用c#執行PowerShell cmdlet並解析cmdlet結果(集合[]。屬性[ 「PropertyName」] .value)來獲取所需的值。如何獲取包含反序列化對象列表(多值屬性)的Cmdlet結果的屬性(執行c#中的powershell cmdlet)

但是其中一些結果包含反序列化對象的列表。但PowerShell只是簡單地將它們轉換爲對象的ArrayList,我無法獲得它們的所有屬性。

例如:Exchange命令行管理程序的Get-MailboxDatabase cmdlet返回Exchange服務器(集合)上的mailboxdatabase列表。我可以從PSObject.Properties [「PropertyName」]。Value中獲取名稱,服務器等屬性。

它還包含數據庫副本的列表(類似下面)

類MailboxDatabase {DatabaseCopy [] DatabaseCopies; }

PSObject.Properties [「DatabaseCopies」]。Value只不過是對象的一個​​arrayList。

但所有的DatabaseCopy屬性都沒有反序列化(或者 - 我不知道如何獲取它們)。

我只能看到Name(從ArrayList列表中的DatabaseCopy的tostring)。

任何人都可以幫助我如何獲得多值結果的所有反序列化屬性?

有關詳細信息,你可以看看:How to get DatabaseCopies from MailboxDatabase programmatically in C# (wrapped ExchangeMangementShell cmdlets in c#)?

問候, 夢想家

回答

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'. 

所以,看起來我沒有任何選擇。我會爲我的用例尋找解決方法。

0

cmdlet應返回PSObject或PSObject列表。

我認爲DatabaseCopies沒有序列化,只是設置爲純字符串。所以他們不能被反序列化。

+0

但DatabaseCopy是一個可序列化的類。例如:它的定義爲[Serializable] public class DatabaseCopy:ADConfigurationObject,IActivationPreferenceSettable ,IComparable { //屬性 public int ActivationPreference {get;內部設置; } internal int ActivationPreferenceInternal {get;組; } public string DatabaseName {get; } public string HostServerName {get; } public EnhancedTimeSpan ReplayLagTime {get;組; } [參數(必填= false)] public EnhancedTimeSpan TruncationLagTime {get;組; } } – Dreamer

相關問題