0

我有以下命令:

$IP_start = $First.Substring(0, $First.LastIndexOf('.'))+ ".200"

$First是 IP 地址,例如 192.168.0.1

我想将第四个八进制中的 1 更改为 200。

Write-Output $IP_start

给了我正确的 IP 地址 192.168.0.200,但同时我得到以下错误:

Ausnahme beim Aufrufen von "Substring" mit 2 Argument(en): "Die Länge darf nicht kleiner als 0 (null) sein. Parametername: length" In *ps1:31 Zeichen:3 + $IP_start = $First.Substring(0, $First.LastIndexOf('.'))+ ".200" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentOutOfRangeException

英文翻译

使用 2 个参数调用“子字符串”时出现异常:“长度不能小于零。参数名称:长度”在 * ps1:31 个字符:3...

我认为一切正常,但错误消息困扰着我。

//编辑:

有一个 ip.txt,其中每一行都像“192.168.0.1; ABCDEF”

$txt = Get-Content ip.txt
$editline = foreach ($Data in $txt) {
  $First, $Second = $Data -split ';' -replace '^\s*|\s*$'

$IP_start = $First.Substring(0, $First.LastIndexOf('.'))+ ".200"
Write-Output "modify ipaddr_first $IP_start"
}

$editline | Out-File "$output"

因此,$first 是“192.168.0.1”,而 $second 是“ABCDEF”。

4

3 回答 3

2

您可以使用正则表达式

$IP_start = "192.168.1.1"
$IP_start -replace "\d{1,3}$","200"

192.168.1.xxx这将改变任何192.168.1.200

于 2017-06-02T14:45:33.993 回答
1
$IP_start = "192.168.1.1"
(($IP_start -split "\.")[0..2] -join ".") + ".200"
于 2017-06-02T17:01:43.043 回答
0

为 IPAddress 对象创建合成方法,这是一种有趣的方法......

$Method = {
Param(
[Int]$Number,

[ValidateSet(1,2,3,4)]
[Int]$Position
)

$OctetPosition = $Position - 1
$CurrentIpAddress = New-Object -TypeName System.Collections.ArrayList
$This.IpAddressToString -Split '\.' | ForEach-Object -Process {
    $CurrentIpAddress.Add($_) | Out-Null
}

$ChangedOctet = [Int]($CurrentIpAddress[$OctetPosition]) + $Number

if( $ChangedOctet -gt 255 ){
    throw "Resulting octet is $ChangedOctet which is greater than 255"
}

$CurrentIpAddress.Item($OctetPosition) = $ChangedOctet


return ($CurrentIpAddress -join '.')

}

$IPAddress = [System.Net.IpAddress]'192.168.1.1'
$IPAddress | Add-Member -MemberType ScriptMethod -Name Add -Value $Method

#$IPaddress.Add($Number,$OctetPosition)
$IPAddress.Add(200,4)
于 2017-06-03T18:02:03.573 回答