通过远程会话将Exchange命令行管理程序与C#一起使用时防止反序列化
在我的文章中,当直接在Exchange命令行管理程序(EMS)中执行脚本与通过C#Powershell远程会话执行脚本时,出现了什么问题?结论是对象正在序列化 例如,通过远程会话将Exchange命令行管理程序与C#一起使用时防止反序列化,c#,powershell,serialization,deserialization,exchange-server,C#,Powershell,Serialization,Deserialization,Exchange Server,在我的文章中,当直接在Exchange命令行管理程序(EMS)中执行脚本与通过C#Powershell远程会话执行脚本时,出现了什么问题?结论是对象正在序列化 例如,ADIdentity对象现在只是一个包含规范DN的字符串。当我需要执行更复杂的脚本时,这使得编码变得更加困难 剧本: $FwdingMBs = Get-Mailbox -Filter {ForwardingAddress -ne $null -or ForwardingSmtpAddress -ne $null} foreach
ADIdentity
对象现在只是一个包含规范DN的字符串。当我需要执行更复杂的脚本时,这使得编码变得更加困难
剧本:
$FwdingMBs = Get-Mailbox -Filter {ForwardingAddress -ne $null -or ForwardingSmtpAddress -ne $null}
foreach ($mb in $FwdingMBs) {
[string]$Name = $mb.DisplayName
[string]$fwdAddress = "";
if ($mb.ForwardingAddress -ne $null) {
[string]$fwdAddress = (Get-ADObject -Identity $(($mb.ForwardingAddress).DistinguishedName) -Properties mail).mail
}
$properties = @{
Name = $Name
ContactAddress = $fwdAddress
DeliverToMailboxAndForward = $mb.DeliverToMailboxAndForward
}
$o = New-Object psobject -Property $properties;
# Dit zet het object bruikbaar als object in c#
Write-Output $o
}
我正在运行Exchange 2019,希望接收每个邮箱的转发设置。。。在EMS中运行脚本,它运行良好。。然而,通过C#powershell,它无法从$mb.ForwarindAddress
中获取DifferentizedName
,因为该属性现在已变成字符串,而不是对象
因此,我的第一个问题是,如何编写这个脚本,使我仍然能够接收代表邮件转发对象的ADIdentity对象的邮件地址
第二个问题是,有没有办法防止序列化?所以我在谷歌上搜索了一下,因为答案是否定的,但我发现有人说:
在一些挖掘之后,我尝试在打开PSSession之前手动加载Exchange程序集。相同的结果,字符串的集合
在(再次)挖掘之后,我使用以下命令加载了程序集和exchange.types.ps1xml文件:
updatetypedata-PrependPath($path+“exchange.types.ps1xml”)
就这样!我得到了完整的对象集合
即使这不是我想要的,我也可以将Exchange程序集加载到我的C#应用程序中,但目前我不知道如何从中更新类型数据
所以我的第二个问题来了:这个人是否设法解决了这个问题并接收到了完整的反序列化对象?论坛上的帖子已经存档,所以我无法回复。。。我在任何地方都找不到thisexchange.types.ps1xml
文件。有人知道他耍的把戏吗?在哪里可以找到这个文件