【发布时间】:2010-12-23 08:36:35
【问题描述】:
我是 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 应该获得第三个字段“名称”,只要有匹配的“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
有没有更好的方法?
【问题讨论】:
-
令人难以置信的是,PowerShell 中还没有包含这个功能
-
@Michael 您如何获得所有活动租约的 IP 地址到主机名的表?我一直在使用 DHCP 模块,但无法弄清楚。我也在尝试合并一些表格。
-
@Ruisu 我使用
netsh的 dhcp 命令获取列表,然后使用正则表达式解析输出。还有DHCP Server Management API,但它仅适用于本机代码。我不知道有任何 powershell 模块或 .net 库可以做这种事情。我最终将 P/Invoke 包装器写入 DHCP 服务器管理 API。
标签: scripting powershell dhcp