首页 > 解决方案 > 选择并迭代属性

问题描述

我正在尝试从属性列表中读取内容,其中一个属性是对象。我需要使用什么来读取字符串和对象属性?

这是Get-Member列表的输出

PS> $r | 获取会员

名称 MemberType 定义
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode 方法 int GetHashCode()
GetType 方法类型 GetType()
ToString 方法字符串 ToS​​tring()
ActivityName 属性字符串 ActivityName {get;}
DurationInMs 属性 System.Nullable[int] DurationInMs {get;}
错误属性 System.Object 错误 {get;}
输入属性 System.Object 输入 {get;}
输出属性 System.Object 输出 {get;}
Status 属性字符串 Status {get;}


PS> $r.输出 | 获取会员

...
名称 属性字符串 名称 {get;}
下一个属性 Newtonsoft.Json.Linq.JToken Next {get;}
路径属性字符串路径 {get;}
上一个属性 Newtonsoft.Json.Linq.JToken 上一个 {get;}
根属性 Newtonsoft.Json.Linq.JToken 根 {get;}
...

(这是一个很长的列表,隐藏了不必要的细节)

我正在尝试以表格格式选择 ActivityName、DurationInMs 和输出值。Output 对象中的 Root 属性具有 dataRead、dataWritten 属性的值。

这是我尝试过的:

$r | Select ActivityName,DurationInMs

输出:

活动名称 DurationInMs
------------ ------------
第 78 天
设置 TS 15
LKUP_FileControl 12206
复制路径 38585

我也试过这个:

$r.Output | select @{name="dataRead"; expression={$_.Root.dataRead.Value}},@{name="dataWritten"; expression={$_.Root.dataWritten.Value}}

输出:

数据读取数据写入
-------- ------------


520114512 520114512
520114512 520114512
520114512 520114512
0 0
0 0
0 0
3199091788 3199091788
3199091788 3199091788
3199091788 3199091788

(注意:这会导致重复,因为 Root 属性内部还有其他嵌套属性)

我希望输出采用表格格式,例如:

ActivityName DurationInMs dataRead dataWritten
------------ ------------ --------- ------------
第 78 天
设置 TS 15 520114512 520114512
LKUP_FileControl 12206 0 0
复制路径 38585 3199091788 3199091788

如何在 PowerShell 中执行此操作?

标签: powershell

解决方案


结合您的两个代码片段以获得所需的结果:

$r | Select-Object ActivityName, DurationInMs,
    @{n='dataRead';e={$_.Output.Root.dataRead.Value}},
    @{n='dataWritten';e={$_.Output.Root.dataWritten.Value}}

推荐阅读