相关疑难解决方法(0)

在Powershell中,将两个表合并为一个表的最佳方法是什么?

我是Powershell的新手,我想知道是否有人知道有任何更好的方法来完成以下示例问题.

我有一个从IP地址到主机名的映射数组.这表示活动DHCP租约列表:

PS H:\> $leases

IP                    Name
--                    ----
192.168.1.1           Apple
192.168.1.2           Pear
192.168.1.3           Banana
192.168.1.99          FishyPC
Run Code Online (Sandbox Code Playgroud)

我有另一个从MAC地址到IP地址的映射数组.这代表了IP预订列表:

PS H:\> $reservations

IP                    MAC
--                    ---
192.168.1.1           001D606839C2
192.168.1.2           00E018782BE1
192.168.1.3           0022192AF09C
192.168.1.4           0013D4352A0D
Run Code Online (Sandbox Code Playgroud)

为方便起见,我能够使用以下代码生成从MAC地址到IP地址和主机名的第三个映射数组.我们的想法是$reservations应该获得第三个字段"Name",只要有匹配的"IP"字段就填充该字段:

$reservations = $reservations | foreach {
    $res = $_
    $match = $leases | where {$_.IP -eq $res.IP} | select -unique
    if ($match -ne $NULL) {
        "" | select @{n="IP";e={$res.IP}}, @{n="MAC";e={$res.MAC}}, @{n="Name";e={$match.Name}}
    }
}
Run Code Online (Sandbox Code Playgroud)

所需的输出是这样的:

PS H:\> $ideal

IP                    MAC                 Name
--                    ---                 ----
192.168.1.1 …
Run Code Online (Sandbox Code Playgroud)

powershell scripting dhcp

16
推荐指数
3
解决办法
2万
查看次数

在powershell中合并json对象

我的json看起来像这样:

{
    "Workflow": [
        {
            "Parameters": {
                "Project": "/Path/To/File",
                "OtherParam": "True"
            }
        }
    ],
    "Overrides": [
        {
            "Special": {
                "Parameters": {
                    "NewParam": "NewStuffGoesHere",
                    "OtherParam": "False"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

...我想使用该Overrides.Special部分添加或更新工作流对象中的字段.换句话说,鉴于上面的json,我想做这样的事情:

$config = Get-Content workflow.json | out-string | ConvertFrom-Json
$configWithOverrides = Merge-Object $config.Workflow $config.Overrides.Special
Run Code Online (Sandbox Code Playgroud)

并最终得到这样的东西:

$configWithOverrides

Parameters
----------
@{Project=/Path/To/File; NewParam=NewStuffGoesHere; OtherParam=False}
Run Code Online (Sandbox Code Playgroud)

我当然可以Merge-Object根据覆盖部分中的内容编写上面的函数来根据需要添加或更新值,但似乎应该(可以?)是内置或单行方式来处理它.

我试过这个:

$test = $config.Workflow + $config.Overrides.Special
Run Code Online (Sandbox Code Playgroud)

......但这不太有效.

$test
Parameters
----------
@{Project=/Path/To/File; OtherParam=True}
@{NewParam=NewStuffGoesHere; OtherParam=False}
Run Code Online (Sandbox Code Playgroud)

这样可以添加参数:

>$test.Parameters.NewParam
NewStuffGoesHere
Run Code Online (Sandbox Code Playgroud)

......但是更新它们并不是那么好

>$test.Parameters.OtherParam
True
False
Run Code Online (Sandbox Code Playgroud)

注意 - 在这个例子中,我选择在将json转换为psobject之后处理合并,但这不是必需的.

powershell json

9
推荐指数
1
解决办法
5123
查看次数

使用PowerShell合并/串联多个json文件

我有多个要使用PowerShell串联或附加的.json文件。我希望下一个继续下去。为了简单起见,我将显示一个我想合并的两个文件的示例。

File1.json

[
    {
        "ItemID":  10746,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "SRP":  0.0001,
        "UPC":  "9076625"
    },
    {
        "ItemID":  10761,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "UPC":  "6128021"
    } ]
Run Code Online (Sandbox Code Playgroud)

File2.json

[
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "UPC":  "4000308"
    },
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "SRP":  14.6500,
        "UPC":  "099904000308"
    }
]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在Powershell中使用以下语法来连接两个json文件。

获取内容“ C:\ File1.json”,“ C:\ File2.json” | 设置内容“ C:\ CombinedOutput.json”

但是,当我执行此脚本时,我几乎得到了我所需要的东西,除了左首和尾括号(其中一个json文件结束而下一个开始)。这两个括号如下面示例中的中间部分所示,应将其删除并替换为上面示例中的逗号。

注意:我无法大胆,所以我在星号周围加了注意。

[
    {
        "ItemID":  10746,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "SRP":  0.0001,
        "UPC":  "9076625"
    },
    { …
Run Code Online (Sandbox Code Playgroud)

powershell json

3
推荐指数
1
解决办法
1784
查看次数

标签 统计

powershell ×3

json ×2

dhcp ×1

scripting ×1