我正在使用 C# 调用 Exchange 2010 PowerShell 方法,但我刚刚遇到了一个障碍。

Execute 方法返回的 Collection 没有 BaseObject。我可以使用 .Properties["PropertyName"],但似乎所有这些值都是字符串值。对于文件大小、指南等来说不太实用。

阅读 http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx, ,看来这很正常,我的类型是Deserialized.Namespace.TypeName。

我正在寻找一种方法将它们序列化回可以使用属性等的活动对象。我有合适的 DLL 和一切。

有帮助吗?

解决方案

看来我可以获得任何我想要的属性,但它需要位于我远程调用的 PS 脚本中。

我在通过直接远程 powershell 查询 PowerShell 时发现了这一点,而不是使用 Exchange 命名空间。

这是一个例子

$spsite | Select Id, Url,
          @{ Name = "Owner"; Expression = { $_.Owner.UserLogin } }

这工作完美,然后我可以使用

psResult.Members["Owner"].Value as string

得到主人

其他提示

您可以像这样获取原始对象:

PS 位:

$results = $MyCustomCollection

C# 位:

System.Collections.ObjectModel.Collection<PSObject>
results = pipeline.Invoke();

CustomCollection theCustumCollection
    = (CustomCollection )runspace.SessionStateProxy.GetVariable("results");

您必须确保返回的唯一内容是该对象,而不是其他内容;所以把任何会返回 null 的东西都放进去;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top