2

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

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

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

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

4

2 回答 2

0

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

PS位:

$results = $MyCustomCollection

C#位:

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

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

您确实必须确保返回的唯一内容是该对象而不是其他任何东西;所以把任何可以返回 null 的东西;

于 2010-09-24T14:18:21.027 回答
0

似乎我可以获得任何我想要的属性,但它需要在我远程调用的 PS 脚本中。

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

这是一个例子

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

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

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

得到主人

于 2010-09-28T20:47:48.760 回答