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

标签 powershell hash powershell-4.0 select-object

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

哈希表

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

>$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 有一些相似的方面(以命名方式包含其他内容的东西),但据我所知,它们是不兼容的 - 对于我来说,是否有更接近 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/

相关文章:

perl - 如何访问嵌套 Perl 散列的值?

python - 从 2 个 uint64 值中提取 Spooky-hash 128 位值

powershell - 如何在点源时调用全局命令

powershell-4.0 - Invoke-Command 比命令本身更快?

powershell - 将函数的结果返回到运行时脚本

使用替代凭证的 Powershell 自动复制文件

sql-server - 计算 SQL Server 中表的哈希值或校验和

string - Powershell 将环境变量与路径连接起来

java - 使用 Select-String 和正则表达式从 Java 文件中获取方法签名

windows - 如何从 CLI 在 Windows 上将 AC3 转换为 AAC