powershell - 将cmdlet Get-DhcpServerv4Reservation存储到变量然后打印它,不会给出预期的输出

时间:2015-03-04 20:27:05

标签: powershell

我在Windows Server 2012 R2中运行带有活动作用域的DHCP服务器,并且我已经创建了一个脚本,要求用户输入MAC地址,然后从示波器保留可用的ip到用户的MAC。

实际预订没有问题,但我已经引入了一个 IF ELSE 语句,希望条件表达式在保留成功时评估为TRUE,否则评估为FALSE。

但是表达式总是计算为FALSE,因为将cmdlet Get-DhcpServerv4Reservation 的执行存储到变量然后打印它会产生一个非常混乱的输出:基本上它会打印" DHCPServerv4Reservation"与作用域中存在的预留次数一样多,而不是直接执行cmdlet时给出的输出。

以下是代码:

clear-host

$mac=read-host -prompt "Please type the MAC address for the host "

$freeip=Get-DhcpServerv4FreeIPAddress -scopeid 10.10.10.0

Add-DhcpServerv4Reservation -ScopeId 10.10.10.0 -ClientId $mac -IPAddress $freeip

$reservedips=Get-DhcpServerv4Reservation -ScopeId 10.10.10.0

if ($reservedips -match $freeip) {

    write-host "The ip $freeip has been succesfully reserved for the host with the MAC address $mac"
}

else {write-host "I'm sorry but there are no free ip addresses to be  reserved"}

# this is just to see what's inside $reservedips
write-host $reservedips

为什么会这样?感谢

2 个答案:

答案 0 :(得分:1)

Get-DhcpServerv4Reservation的结果是预订对象。

-match运算符用于将字符串与正则表达式匹配。

你可能会看到类似的东西:

if (($reservedips | Where-Object { $_.IPAddress -eq $freeip })) {
    # success
}

我认为您考虑重构代码看起来像这样:

$mac=read-host -prompt "Please type the MAC address for the host "

$freeip=Get-DhcpServerv4FreeIPAddress -scopeid 10.10.10.0

try {
    Add-DhcpServerv4Reservation -ScopeId 10.10.10.0 -ClientId $mac -IPAddress $freeip -ErrorAction Stop
} catch {
    Write-Host "An error has occurred while trying to add a reservation for '$mac' with IP '$freeip'."
}

添加-ErrorAction Stop会强制try / catch阻止所有异常。

答案 1 :(得分:0)

这是我提出的替代方案,可行

clear-host

$mac=read-host -prompt "Please type the MAC address for the host "

$freeip=Get-DhcpServerv4FreeIPAddress -scopeid 10.10.10.0

Add-DhcpServerv4Reservation -ScopeId 10.10.10.0 -ClientId $mac -IPAddress $freeip

$reservedips=Get-DhcpServerv4Reservation -ScopeId 10.10.10.0 | Where-Object ipaddress -eq $freeip

if ($reservedips -eq "") {write-host "I'm sorry but there are no free ip addresses to be reserved"}

else {write-host "The ip $freeip has been succesfully reserved for the host with the MAC address $mac"}