在Powershell中,将两个表连接成一个表的最好方法是什么?

nsunt 发布于 2019-11-10 dhcp 最后更新 2019-11-10 12:10 102 浏览

我对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
我有从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
为了方便起见,我能够使用以下代码生成从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}}
    }
}
所需的输出是这样的:
PS H:\> $ideal
IP                    MAC                 Name
--                    ---                 ----
192.168.1.1           001D606839C2        Apple
192.168.1.2           00E018782BE1        Pear
192.168.1.3           0022192AF09C        Banana
192.168.1.4           0013D4352A0D
有没有更好的方法来做到这一点?
已邀请:

znihil

赞同来自:

内容太长未翻译

jalias

赞同来自:

Lee Holmes写了一个blog post on a Join-Object function来做你想做的事。太糟糕了,它还没有内置到PowerShell中。