none
PowerShell: Десериализация свойства объекта после выгрузки через export-clixml и последующего импорта через import-clixml RRS feed

  • Вопрос

  • Добрый день!

     

    Общее описание:
    При выгрузке в xml-файл списка  Emailaddresses (адресов) почтовых ящиков exchange, полученных от коммандлета Get-Mailbox и последующем создании объектов из этих файлов, класс объекта Emailaddresses (адресов) меняется с Microsoft.Exchange.Data.ProxyAddressCollection на Deserialized.Microsoft.Exchange.Data.ProxyAddressCollection после чего их становится невозможно подгрузить к ящикам на сервере exchange.

    Вопросы:
    1. Можно ли избежать смены класса объекта при экспорте-импорте
    2. Можно ли импортировать объекты другого класса, переопределив тип (как в С), переподготовив их или еще как-то 

    Пошаговое описание:

    1. получение списка email адресов с почтового ящика exchange 2007 в переменную, экспорт в xml файл.

    [PS] C:\Windows\system32>$ads = Get-Mailbox -anr Shkoda | select EmailAddresses
    [PS] C:\Windows\system32>$ads
    
    EmailAddresses
    --------------
    {SMTP:shkoda@szess.ru, smtp:??????????????????????7@szess.ru}
    
    
    [PS] C:\Windows\system32>$ads | Export-Clixml c:\temp\ads.xml
    

    2. Импорт из файла в другую переменную, типы классов

    [PS] C:\Windows\system32>$bds = Import-Clixml c:\temp\ads.xml
    [PS] C:\Windows\system32>$bds
    
    EmailAddresses
    --------------
    {SMTP:shkoda@szess.ru, smtp:??????????????????????7@szess.ru}
    
    
    [PS] C:\Windows\system32>$ads | Get-Member
    
    
      TypeName: Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
    
    Name      MemberType  Definition
    ----      ----------  ----------
    Equals     Method    bool Equals(System.Object obj)
    GetHashCode  Method    int GetHashCode()
    GetType    Method    type GetType()
    ToString    Method    string ToString()
    EmailAddresses NoteProperty Microsoft.Exchange.Data.ProxyAddressCollection EmailAddresses=Microsoft.Exchange.Data.Pr...
    
    
    [PS] C:\Windows\system32>$bds | Get-Member
    
    
      TypeName: Deserialized.Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
    
    Name      MemberType  Definition
    ----      ----------  ----------
    Equals     Method    bool Equals(System.Object obj)
    GetHashCode  Method    int GetHashCode()
    GetType    Method    type GetType()
    ToString    Method    string ToString()
    EmailAddresses NoteProperty Deserialized.Microsoft.Exchange.Data.ProxyAddressCollection EmailAddresses=SMTP:shkoda@s...
    
    

    3. Собственно попытка добавить к списку адресов на ящике новые приводит к

    Cannot convert argument "0", with value: "----здесь данные-----", for "Add" to type "Microsoft.Exch
    ange.Data.ProxyAddress": "Cannot convert the "----здесь данные-----" value of type "Deserialized.Mi
    crosoft.Exchange.Data.SmtpProxyAddress" to type "Microsoft.Exchange.Data.ProxyAddress"."
    At line:1 char:118
    + foreach ($i in $a.EmailAddresses) { if( $ads.EmailAddresses.IndexOf($i.SmtpAddress) -eq -1) {$ads.EmailAddresses.Add
     <<<< ($i)} }
      + CategoryInfo     : NotSpecified: (:) [], MethodException
      + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
    

     

    15 апреля 2011 г. 18:28

Ответы

Все ответы