【问题标题】:vb.net casting a powershell output of objectmodel.collection(of PSObject) to a usable VB.net objectvb.net 将 objectmodel.collection(of PSObject) 的 powershell 输出转换为可用的 VB.net 对象
【发布时间】:2018-08-10 07:25:21
【问题描述】:

我正在使用 vb.net 远程运行一些 powershell 命令,powershell.invoke 的输出是

ObjectModel.Collection(Of PSObject)

键入。

我想将这些转换为可用的 vb.net 类/集合。当我调试代码并将鼠标悬停在输出 / ObjectModel.Collection(Of PSObject) 上时,数据显示为;

(0) {@{Name=John;Books=System.Collections.ArrayList}}
(1) {@{Name=Gerry;Books=System.Collections.ArrayList}}

如何将其转换为可用的 vb.net 类/对象?

我已经尝试过像这样制作一个自定义类;

Class BookOwner
     public name as string
     public Books as systems.collections.arraylist
end class

然后将其投射到对象上;

dim MyBookOwner as BookOwner = trycast(Output(0).BaseObject, BookOwner)

输出是 objectmodel.collection(of PSObject) 类型。

但是在 trycast 之后,MyBookOwner 保持为空。

如何将 ObjectModel.Collection(Of PSOject) 转换为可用的 vb.net 对象。

【问题讨论】:

标签: vb.net powershell casting psobject


【解决方案1】:

根据我对PSObject 类型的了解,并且没有进行任何实际测试,我认为您可以这样做:

Dim bookOwners As New List(Of BookOwner)

For Each pso In myPsObjectCollection
    Dim props = pso.Properties
    Dim name = CStr(props.Single(Function(pspi) pspi.Name = "Name").Value)
    Dim books = DirectCast(props.Single(Function(pspi) pspi.Name = "Books").Value, ArrayList)

    bookOwners.Add(New BookOwner With (.Name = name, .Books = books})
Next

当然,如果您愿意,也可以将其压缩为 LINQ 查询。

【讨论】:

    【解决方案2】:

    感谢 jmcilhinney 和 boxdog 的帮助,这些信息非常有用。

    为每个人做一个法线是 jmcilhinney 的想法,使用 .members 是在 boxdog 的示例中。所以我结合了你的两个建议来结束这个;

    dim AllBooks as new list(of BookOwner)
    
    for each a as psobject in output
          dim abc as psobject = a.members("Books").value 
          AllBooks.add(new BookOwner with {.Name = A.Members("Name").value,
                                           .Books = tryCast(abc.BaseObject, ArrayList)})
    next
    

    我很惊讶这不起作用;

    for each a as psobject in output
          AllBooks.add(new BookOwner with {.Name = A.Members("Name").value,
                                           .Books = tryCast(A.Members("Books").value.BaseObject, ArrayList)})
    next
    

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 2015-07-23
      • 2015-12-28
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      相关资源
      最近更新 更多