8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

PowerShell 脚本将替换 IP 和默认网关中的第二个八位字节

Mechanic Pig 2月前

47 0

我是新来的,希望能得到一些帮助。我需要将 IP 中的第二个八位字节从 42 替换为 41。我设法弄清楚了,但它在默认网关部分不起作用。有什么想法吗?

我是新来的,希望能得到一些帮助。我需要将 IP 中的第二个八位字节从 42 替换为 41。我设法弄清楚了,但它在默认网关部分不起作用。有什么想法吗?

错误

$oldIP = (Get-NetIPAddress -InterfaceAlias Ethernet0).IPAddress
$oldDG = (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway

$newIP = $oldIP -replace 42, 41
$newDG = $oldDG -replace 42, 41

#Write-Output $newIP $oldIP
#Write-Output $newDG $oldDG

New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress $newIP -PrefixLength 28 -DefaultGateway $newDG
Error
New-NetIPAddress : Cannot process argument transformation on parameter 'DefaultGateway'. Cannot convert value to type System.String.
At line:12 char:95
+ ... s Ethernet0 -IPAddress $newIP -PrefixLength 28 -DefaultGateway $newDG
+                                                                    ~~~~~~
    + CategoryInfo          : InvalidData: (:) [New-NetIPAddress], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,New-NetIPAddress
 

@Mathias,这是我在运行你的脚本时遇到的错误

您不能对空值表达式调用方法。第 15 行,字符:1

  • $dgOctets = $oldAdapterConfig.IPv4DefaultGateway.Split('.')
  •   + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      + FullyQualifiedErrorId : InvokeMethodOnNull
    
    

无法索引到空数组。第 18 行,字符:1

  • $dgOctets[1] = '41'
  •   + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      + FullyQualifiedErrorId : NullArray
    
    

New-NetIPAddress:无效参数 DefaultGatewayAt 行:21 字符:1

  • 新网络 IP 地址 -接口别名 Ethernet0 -IP 地址 $新 IP 地址 - ...
  •   + CategoryInfo          : InvalidArgument: (MSFT_NetIPAddress:ROOT/StandardCimv2/MSFT_NetIPAddress) [New-NetIPAddress], CimException
      + FullyQualifiedErrorId : Windows System Error 87,New-NetIPAddress
    
帖子版权声明 1、本帖标题:PowerShell 脚本将替换 IP 和默认网关中的第二个八位字节
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mechanic Pig在本站《powershell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您的代码有两个问题,其中只有一个目前浮现出来。

    当您使用 Get-WmiObject Win32_NetworkAdapterConfiguration |? {$_.IPEnabled} 查询适配器配置时,您可能会获得 机器上 所有启用 IP 的适配器配置

    要获取与分配的 IP 地址特别关联的配置,请通过管道传输 NetIPAddress 实例 Get-NetAdapter

    # fetch existing ip assignment and adapter config
    $oldIPAssignment = Get-NetIPAddress -InterfaceAlias Ethernet0 -AddressFamily IPv4
    $oldAdapterConfig = $oldIPAssignment |Get-NetAdapter
    

    现在您将只会获得一个适配器配置,从而获得一个网关地址。

    第二个问题是用它 -replace 替换特定的八位字节。

    如果旧的 IP 地址是, 10.42.10.142 那么您最终会将其更改 10.41.10.141 10.41.10.142 .

    相反,将 IP 地址分成 4 个组成八位字节,然后单独修改/替换第二个八位字节。

    # split existing IP into 4 separate octet strings
    $ipOctets = $oldIPAssignment.IPAddress.Split('.')
    
    # update 2nd octet and construct new IP address
    $ipOctets[1] = '41'
    $newIPAddress = $ipOctets -join '.'
    
    # split existing DG IP into 4 separate octet strings
    $dgOctets = $oldAdapterConfig.IPv4DefaultGateway.Split('.')
    
    # update 2nd octet and construct new DG IP address
    $dgOctets[1] = '41'
    $newDGAddress = $dgOctets -join '.'
    
    New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress $newIPAddress -PrefixLength 28 -DefaultGateway $newDGAddress
    
  • @Marcin 我要补充一点,Get-WmiObject 在 Powershell 5.1 中已经过时,并且已在 Powershell Core 中删除,因此对于任何新代码,最好将其替换为在 3.0 中引入的替代 Get-CimInstance

  • @sirtao Get-Net* 命令是 CIM cmdlet,因此解决了该问题:)

返回
作者最近主题: