我正在编写一个Powershell cmdlet来列出来自TFS的更改集.我成功查询TFS并获取变更集的集合,但希望返回仅包含少量属性的简化对象.我可以这样使用Select-Object
......
$changesets | Select-Object ChangeSetId, Owner, Comment
Run Code Online (Sandbox Code Playgroud)
我想要添加的最后一个属性是Changes
属性,它是一组更改.我也希望简化这些对象.我正在尝试这个,但它不会返回我想要的东西......
$changesets | Select-Object `
ChangeSetId,
Owner,
Comment,
@{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }}
Run Code Online (Sandbox Code Playgroud)
有没有办法处理嵌套集合Select-Object
?
use*_*407 17
您可以使用cmdlet的-ExpandProperty
参数Select-Object
.它将展开集合并将父对象中的选定属性添加到子对象:
$changesets | Select-Object ChangeSetId, Owner, Comment,
@{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }} |
Select-Object -Property * -ExcludeProperty Changes -ExpandProperty Changes
Run Code Online (Sandbox Code Playgroud)
您的表达式语法不太正确,您需要在表达式和代码块之间使用等号 ("=")。
$changesets | Select-Object `
ChangeSetId,
Owner,
Comment,
@{Name="Changes"; Expression={ $_.Changes | Select-Object ChangeType, ServerItem }}
Run Code Online (Sandbox Code Playgroud)
如果您希望嵌套对象成为未来的顶级元素,您也可以这样做...
$changesets | Select-Object `
ChangeSetId,
Owner,
Comment,
@{Name="ChangeType"; Expression={ $_.Changes.ChangeType}},
@{Name="ServerItem"; Expression={ $_.Changes.ServerItem }}
Run Code Online (Sandbox Code Playgroud)
我可能会为内部集合中的每个项目展开内部集合并输出一次。像这样的东西(未测试):
$changesets | foreach-object {
$changeSetItem = $_
$changeSetItem.Changes | foreach-object {
$changeItem = $_
new-object PSObject -property @{
"ChangeSetId" = $changeSetItem.ChangeSetId
"Owner" = $changeSetItem.Owner
"Comment" = $changeSetItem.Comment
"ChangeType" = $changeItem.ChangeType
"ServerItem" = $changeItem.ServerItem
}
}
}
Run Code Online (Sandbox Code Playgroud)
账单
归档时间: |
|
查看次数: |
14445 次 |
最近记录: |