Лучший отвечающий
New-PSSession. Serialization /deserialization и "dehydrated" объекты

Вопрос
-
Добрый день, коллеги
Как известно, при использовании "remote sessions", объекты возвращаемые с удаленного сервера "десериализуются" и теряются свойства объектов глубже второго уровня вложенности.
Вопрос следующий.
Можно ли как-то повлиять на глубину возвращаемых объектов, т.е. возвращать до 3-го уровня вложенности, включительно?
Покажу на примере Exchange 2010 и прав на календарь:Используем "ремотинг"
PS C:\> $NeedCommand = "Get-MailboxFolderStatistics", "Get-MailboxFolderPermission", "Remove-MailboxFolderPermission", "Add-MailboxFolderPermission", "Set-MailboxFolderPermission"
PS C:\>
PS C:\> $ExPSSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://ex01/PowerShell" -Authentication Kerberos -SessionOption (new-pssessionoption -SkipCACheck -SkipCNCheck) -AllowRedirection
PS C:\> Import-PSSession -Session $ExPSSession -CommandName $NeedCommand -AllowClobberModuleType Name ExportedCommands
---------- ---- ----------------
Script tmp_xki23brr.jf5 {Add-MailboxFolderPermission, Get-MailboxFolderPermission, Get-Mailbo...
PS C:\>
PS C:\> $User = Get-ADUser s-korotkov
PS C:\> $Calendar = (($User.SamAccountName)+ ":\" + (Get-MailboxFolderStatistics -Identity $User.SamAccountName -FolderScope Calendar | where{$_.FolderType -eq "Calendar"} | Select-Object -First 1).Name)
PS C:\>
PS C:\> $CurPerm = @(Get-MailboxFolderPermission -Identity $Calendar)
PS C:\> $CurPerm[2].user
Коротков Сергей
PS C:\> $CurPerm[2].user | gm -MemberType Properties
TypeName: System.StringName MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
PS C:\>
Теперь тоже самое с используя локальный snapin:
PS C:\> Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
PS C:\> $User = Get-ADUser s-korotkov
PS C:\> $Calendar = (($User.SamAccountName)+ ":\" + (Get-MailboxFolderStatistics -Identity $User.SamAccountName -FolderScope Calendar | where{$_.FolderType -eq "Calendar"} | Select-Object -First 1).Name)
PS C:\> $CurPerm = @(Get-MailboxFolderPermission -Identity $Calendar)
PS C:\> $CurPerm[2].userUserType ADRecipient DisplayName
-------- ----------- -----------
Internal Коротков Сергей Коротков Сергей
PS C:\> $CurPerm[2].user | gm -MemberType Properties
TypeName: Microsoft.Exchange.Management.StoreTasks.MailboxFolderUserIdName MemberType Definition
---- ---------- ----------
ADRecipient Property Microsoft.Exchange.Data.Directory.Recipient.ADRecipient ADRecipient {get;}
DisplayName Property string DisplayName {get;}
UserType Property Microsoft.Exchange.Management.StoreTasks.MailboxFolderUserId+MailboxFolderUserType UserType {get;}PS C:\> $CurPerm[2].user.ADRecipient | gm
TypeName: Microsoft.Exchange.Data.Directory.Recipient.ADUserName MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
CopyChangesFrom Method void IConfigurable.CopyChangesFrom(Microsoft.Exchange.Data.IConfigurable source)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
…..
Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам; помогли.
6 сентября 2013 г. 6:40
Ответы
-
Да и если тип неизвестен, а я думаю в локальной сессии о классах Exchange не много известно ,то сериализация работает только для простых типов, следовательно преобразование идет в тип String,а в не в известный Deserialized класс Exchange.
- Изменено KazunEditor 6 сентября 2013 г. 7:04 Deserialized
- Помечено в качестве ответа Sergey Korotkov 16 ноября 2015 г. 6:20
6 сентября 2013 г. 6:53Отвечающий