我的代码更改了ip 20+的最后一个八位字节,现在我正在尝试使用我设置的变量设置本地IP地址,但它不会改变它:
$ip = (ipconfig | findstr "IPv4").split(':')[1].trim()
#variable that finds the IPv4 address
$octet = [byte[]]($ip -split '\.')
$octet[-1]+=20
$ip = $octet -join '.'
$ip
#Changes last octet +20
$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "Description LIKE '%Intel%'"
$wmi.EnableStatic("$ip", "255.255.255.224")
#Changes Local IP Address
答案 0 :(得分:0)
我能够通过使用Get-NetAdapter来实现这一点。
从DHCP到静态IP:
$ip = (ipconfig | findstr "IPv4").split(':')[1].trim()
#variable that finds the IPv4 address
$octet = [byte[]]($ip -split '\.')
$octet[-1]+=20
$ip = $octet -join '.'
$NetAdapter = Get-NetAdapter | ?{$_.InterfaceDescription -match "Intel"}
$NetAdapter | Set-NetIPInterface -Dhcp Disabled
$NetAdapter | New-NetIPAddress -IPAddress $ip -PrefixLength 27 #27=255.255.255.224
更新现有静态IP:
我尝试使用Set-NetIPAddress,但似乎有一个错误。快速搜索显示其他人也遇到了Set-NetIPAddress问题。所以下面我刚刚删除了IP然后添加了新的。
$ip = (ipconfig | findstr "IPv4").split(':')[1].trim()
#variable that finds the IPv4 address
$octet = [byte[]]($ip -split '\.')
$octet[-1]+=20
$ip = $octet -join '.'
$NetAdapter = Get-NetAdapter | ? {$_.InterfaceDescription -match "Intel"}
$NetAdapter | Remove-NetIPAddress -confirm:$false
$NetAdapter | New-NetIPAddress -ipaddress $ip -PrefixLength "27"
答案 1 :(得分:0)
您可能无法获得WMI查询所期望的结果,并且正在设置某个虚拟接口,或者未能设置无法设置的接口,或者如果查询返回集合,则无法设置任何内容。
要查看返回的查询,请在最后添加$wmi | fl *
。它是一个单一的界面,它是你认为你得到的那个?我的猜测是答案是否定的。
您是否看到任何错误消息?我看到你做了两次的错误是假设一个结果可能有多个结果。
$ip = (ipconfig | findstr "IPv4").split(':')[1].trim()
除非您的IP配置只有一行带有“IPv4”,否则此行将导致错误,从而产生字符串。如果有多个匹配项,您将获得一个数组,如果没有匹配项,您将获得 $ null 。无论哪种方式,当您尝试调用拆分方法时,您都会收到错误消息,指出该对象没有拆分方法或者您不能在null值表达式上调用方法。所以这可能适合你,但它不可靠。
如果你确定你总是想要第一个结果......这可能会有用......
$ip = (ipconfig | findstr "IPv4")[0].split(':')[1].trim()
或(更长但更清晰)
$ip = (ipconfig | findstr "IPv4" | select -First 1).split(':')[1].trim()
...但是使用更具体的方法来查找您想要更改的地址会更好。
同样,以下行可以返回单个对象或数组:
$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "Description LIKE '%Intel%'"
如果多个接口与过滤器匹配(这不太可能,考虑到通常有大量虚拟接口),当您尝试调用 EnableStatic 。同样,您可以将| select -First 1
添加到最后,或将所有内容都包含在=
中( )[0]
的右侧。但是,为了使您的主接口更有可能获得单个结果,请尝试以下方法:
$wmi = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Description LIKE '%Intel%' AND IPEnabled = 'True'"