【问题标题】:PowerShell 2.0 via C#, return values are empty?通过 C# 的 PowerShell 2.0,返回值为空?
【发布时间】:2011-07-14 00:45:24
【问题描述】:

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

Execute 方法返回的 Collection 没有 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 和一切。

【问题讨论】:

    标签: c# powershell-2.0 exchange-server


    【解决方案1】:

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

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

    这是一个例子

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

    这很好用,然后我可以使用

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

    找主人

    【讨论】:

      【解决方案2】:

      你可以像这样得到原始对象:

      PS位:

      $results = $MyCustomCollection
      

      C#位:

      System.Collections.ObjectModel.Collection<PSObject>
      results = pipeline.Invoke();
      
      CustomCollection theCustumCollection
          = (CustomCollection )runspace.SessionStateProxy.GetVariable("results");
      

      您必须确保返回的唯一内容是该对象,没有其他内容; 所以把任何可以返回 null 的东西都放上去;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        相关资源
        最近更新 更多