gpt4 book ai didi

powershell - 如何选择某些哈希表值,但在Powershell脚本中内联更改其他值

转载 作者:行者123 更新时间:2023-12-02 23:42:58 24 4
gpt4 key购买 nike

使用管道或其他类型的内联表示法,我想在更改或设置其他哈希值的同时直接从哈希表中“选择”某些值,直达结果。

哈希表

我从一个哈希表开始(坦率地说,它像一个对象一样被使用),如下所示:

>$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更接近吗?

最佳答案

严格地将其作为一种没有设置代码且不会修改源哈希的单行代码,可以执行以下操作:

($hash + @{ 'Result' = 'Good' }).GetEnumerator() | ? {$_.Key -in 'Result','System','Job'}

如果您要定期添加 Result = Good,则保存扩展名可能很方便:
$good = @{ 'Result' = 'Good' }

然后您的单线成为:
($hash + $good).GetEnumerator() | ? {$_.Key -in 'Result','System','Job'}

编辑:如您在下面的注释中所述,如果哈希表中存在 Result,则单行将死亡。这个版本更安全/更明确,并且更直接地映射到您在PSObjects上使用 Select-Object描述的精神:
(($hash).GetEnumerator() | ? {$_.Key -in 'System','Job'}) + @{'Result' = 'Good'}

仍然不是世界上最漂亮的东西,但是它确实可以做到。

关于powershell - 如何选择某些哈希表值,但在Powershell脚本中内联更改其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35775848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com