powershell 要在循环中递增IP地址字符串

2uluyalo  于 2023-03-08  发布在  Shell
关注(0)|答案(4)|浏览(184)

我是powershell的新手。我想把IP地址加一。

$ipaddress = 15
$NICS = Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.IPEnabled -eq “TRUE”}
foreach($NIC in $NICs) {$NIC.EnableStatic("10.0.0.$($ipaddress++)", "255.255.255.0")
            $NIC.SetGateways("10.0.0.1", 1)
            $NIC.SetDNSServerSearchOrder("10.0.0.100")}
rlcwz9us

rlcwz9us1#

使用这种方法,如果你试图创建一个错误的IP地址,你至少会得到一个异常。使用PS中可用的类型有很多好处。我看到其他建议的解决方案将允许你创建以256等结尾的东西。

[IPAddress](([IPAddress]"10.0.0.15").Address + (1 -shl 24)
4dc9hkyq

4dc9hkyq2#

你已经很接近了,你只需要在静态IP声明中使用"10.0.0.$ipaddress",然后在另一行中用$ipaddress++递增它。

$ipaddress = 15
$NICS = Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.IPEnabled -eq “TRUE”}
foreach($NIC in $NICs) {$NIC.EnableStatic("10.0.0.$ipaddress", "255.255.255.0")
            $NIC.SetGateways("10.0.0.1", 1)
            $NIC.SetDNSServerSearchOrder("10.0.0.100")
            $IPAddress++}
slsn1g29

slsn1g293#

两个问题:
1.增量运算符是voidable statements,这意味着它们不会产生返回值,除非你把它们括在圆括号里。用于字符串插值的**$()不算,你需要在它里面再加一对圆括号。
1.当
++*操作符跟在变量后面时,比如$ipaddress++,它是一个 * post -increment操作符,这意味着变量首先在表达式中求值,然后再递增,所以,即使你得到了第二对括号的返回结果,你也是在把$ipaddress**的原始值插入到字符串中,然后再修改它。
把这些放在一起,你需要做的就是改变

foreach ($NIC in $NICs) {$NIC.EnableStatic("10.0.0.$($ipaddress++)", "255.255.255.0")

foreach ($NIC in $NICs) {$NIC.EnableStatic("10.0.0.$((++$ipaddress))", "255.255.255.0")
    • 更新**

问题的措辞含糊不清,我以为你说的"我想把IP地址加1",意思是你想把IP地址设置成比变量**$ipaddress**的值高1(我想这可能来自于在更早的时候读取当前的IP地址)。如果你的意思是你想给每个连续的NIC分配越来越多的IP地址,从15开始,那么TheMadTechnician的答案是有效的,但是你也可以用更简洁的方式来做,因为问题的根源是你用$($ipaddress++)在字符串中插入了一个空值:

foreach ($NIC in $NICs) {$NIC.EnableStatic("10.0.0.$(($ipaddress++))", "255.255.255.0")
hyrbngr7

hyrbngr74#

嗨,感谢weq的回答,它让我找到了一种方法来做一个完整的8字节增量。我不知道这是否是你正在寻找的,但对我来说,这是非常有用的。

# $i being the increment.
[IPAddress](([IPAddress]"192.168.104.0").Address + (($i-band 255) -shl 24) + ((($i -shr 8) -band 255) -shl 16) + ((($i -shr 16) -band 255) -shl 8) + (($i -shr 24) -band 255))

希望这个能帮上忙。

相关问题