从用户输入获取IP地址,生成3个其他静态IP

时间:2015-11-20 02:37:04

标签: powershell

我正在寻找一种更有效的方法来从用户获取IP地址,将IP地址拆分为数组,敲掉最后一个八位字节,替换为特定数字,然后将数组加入新的IP地址。

例如:用户输入IP:10.1.1.50。从这个输入,我取前3个八位字节,然后生成10.1.1.1,10.1.1.10和10.1.1.11。我可以在程序上这样做,但似乎我在3次迭代中进行相同的操作,函数可能是有益的,但我的尝试失败了。

$ip= $(read-host "Enter any IP Address")

$gateway = $ip.split('.')
$gateway[-1] = 1
$gateway = $ipArray -join '.'

$dns1 = $ip.split('.')
$dns1[-1] = 10
$dns1 = $dns1 -join '.'

$dns2 = $ip.split('.')
$dns2[-1] = 11
$dns2 = $dns2 -join '.'

我用$threeOctets = $ip | Select-Object -First 3将前3个八位字节分开了,哪个工作正常,我在任何时候操作它,我只是在1上添加,然后是10,然后是11添加1,然后返回前3个八位组并添加10,然后返回并添加11。

2 个答案:

答案 0 :(得分:2)

为什么要在最后一个八位字节中输入用户类型,只是将其剪掉然后扔掉?如果网络不是全部/ 24?

,你确定这是一个很好的设计吗?

无论如何,没有真正需要拆分和加入,你可以:

$ip = (Read-Host "Enter an IP") -replace '\d+$'
$gateway, $dns1, $dns2 = ('1','10','11' | foreach {"$ip$_"})

替换摆脱了最后的数字。循环将一个字符串放入管道中,用于数组中三个数字中的每一个。多重赋值将来自管道的三个值转换为三个变量。

(PowerShell确实有基本的IP地址类型,[ipaddress]"192.168.0.1",但它们太基本了,不能在这里提供很多帮助。)

答案 1 :(得分:2)

我同意TessellatingHeckler's answer说。但是我希望使用[ipaddress]来展示另一种具有一些基本纠错功能的方法。

do{
    $ip = $(read-host "Enter any IP Address")
} while(!($ip -as [ipaddress]))

$octets = ([ipaddress]$ip).Getaddressbytes()
$gateway, $dns1, $dns2 = '1','10','11' | ForEach-Object{$octets[3] = $_; $octets -join "."}

这绝不是一个更好的方法。仅仅是另一个。纠错并不完美,可以打破,但在某些情况下,它比裤子更好。

获取IP。将其转换为数组中的八位字节。用管道值替换数组的最后一个元素。再次加入一段时间,使其再次成为有效的IP。

遗憾的是,[Ipaddress]类不会让你编辑八位字节。 [version]也是这样的,这很不幸。