使用管道或其他类型的内联表示法,我想在哈希表中“选择”某些值直接到结果,同时更改或设置其他值。
哈希表
我从一个哈希表开始(坦率地说,它就像一个对象一样使用),如下所示:
>$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
我在这里尝试做的事情的替代方案?