【发布时间】:2016-06-16 23:53:53
【问题描述】:
使用管道或其他类型的内联表示法,我想直接“选择”哈希表中的某些值以获得结果,同时更改或设置其他值。
哈希表
我从一个哈希表开始(坦率地说,它就像一个对象一样使用),如下所示:
>$hash
Name Value
---- -----
System server-1
Job Microsoft.PowerShell.Commands.PSWmiJob
Result
有没有办法使用 Select-Object cmdlet(或类似的东西)来设置某些属性的值并传递其他属性?我想结束这个:
>$hash
Name Value
---- -----
System server-1
Job Microsoft.PowerShell.Commands.PSWmiJob
Result Good
如果我不需要/不希望它是内联的,我只需设置 Result 的值:
$hash.Result = "good"
对于内联解决方案,我总是可以像这样使用Foreach-Object:
$hash | Foreach-Object {@{System=$_.System;Job=$_.Job;Result="Good"}}
或者直接在子表达式中引用$hash:
${@{System=$hash.System;Job=$hash.Job;Result="Good"}}
但是,当我只处理一个哈希表时,使用 Foreach-Object 似乎很荒谬,并且非常冗长地提及两次我只想通过的属性,然后如果我的 $hash变量是$aSignificantlyLongerHashTableVariableName。
如果我使用的是 Powershell 对象...
如果我使用这样的对象:
>$obj
System Job Result
------ --- ---
server-1 Microsoft.PowerShell.Commands.PSWmiJob
我会像这样使用select-object Cmdlet:
>$obj | Select-Object System, Job, @{Name="Result";Expression="Good"}
这会导致
>$obj
System Job Result
------ --- ---
server-1 Microsoft.PowerShell.Commands.PSWmiJob Good
Hashtable 和 PSObject 有一些相似的方面(以命名方式包含其他东西的东西),但是 AFAIK,它们不兼容 - 对于我在这里尝试做的事情,是否有更接近 Select-Object 的替代方案?
【问题讨论】:
标签: powershell hash powershell-4.0 select-object