powershell - Powershell防止重复的对象键

标签 powershell

这是this question的后续 Activity

如果我有2个json文件

file1.json

{
  "foo": {
    "honk": 42
  }
}

file2.json
{
  "foo": {
    "honk": 9000,
    "toot": 9000
  }
}

我使用ConvertFrom-Json创建一个对象
$bar = @(Get-ChildItem . -Filter *.json -Recurse | Get-Content -Raw |ConvertFrom-Json)

Powershell会很乐意同时使用这两者,并覆盖foo。
foo

---
@{honk=42}
@{honk=9000; toot=9000}

$ bar.foo的内容被合并
$bar.foo

honk
----
  42
9000

如果导入重复的对象怎么办?

最佳答案

每个JSON文件都作为单独的对象导入,因此实际上没有任何覆盖。您只获得对象列表。

要在拥有多个具有相同顶级属性的对象时引发错误,可以按属性名称对对象进行分组,如果计数> 1,则引发错误。

$bar | Group-Object { $_.PSObject.Properties.Name } |
  Where-Object { $_.Count -gt 1 } |
  ForEach-Object { throw "Duplicate object $($_.Name)" }

关于powershell - Powershell防止重复的对象键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069437/

相关文章:

azure - 从 Azure 中的虚拟网络网关获取虚拟网络详细信息

powershell - 缺少PowerShell命令?

powershell - 列出本地用户及其组

PowerShell 中的 .NET 跟踪,无需创建 .config 文件

windows - 动力外壳 $?在做直到循环

c# - 在运行空间中从 c# 调用 PowerShell 脚本并获取发生错误的行号

powershell - 如何将子项目从最深的子文件夹排序到最高的?

powershell - 显示在 "Processes"而不是 "Applications"

ArgumentList 为空时的 PowerShell Start-Process cmdlet

powershell - 通过枚举逐项列出的PowerShell访问多维数组