通过 C# 的 PowerShell 2.0,返回值为空?
-
20-09-2019 - |
题
我正在使用 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 的东西都放进去;
不隶属于 StackOverflow