Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 尝试使用变量更改静态IP_Powershell_Static_Ip - Fatal编程技术网

Powershell 尝试使用变量更改静态IP

Powershell 尝试使用变量更改静态IP,powershell,static,ip,Powershell,Static,Ip,我的代码更改了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

我的代码更改了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

通过使用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:

$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
我尝试使用Set-NetIPAddress,但似乎有一个bug。快速搜索显示,其他人也有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"

您可能没有从WMI查询中获得预期的结果,并且正在设置一些虚拟接口,或者未能设置不可设置的接口,或者如果查询返回集合,则根本无法设置任何内容

要查看查询返回的内容,请在末尾添加
$wmi | fl*
。它是一个单一的界面吗?它是你认为你得到的界面吗?我猜答案是否定的

您是否看到任何错误消息?我看到你犯了两个错误,一个是假设一个结果,而多个结果是可能的

$ip = (ipconfig | findstr "IPv4").split(':')[1].trim()
这一行将导致错误,除非您的IP配置有且只有一行带有“IPv4”,从而导致字符串。如果有多个匹配项,您将得到一个数组,如果没有匹配项,您将得到$null。无论哪种方式,当您尝试调用Split方法时,您都会得到一个错误,说明对象没有Split方法,或者您不能对空值表达式调用方法。所以这可能对你有用,但不可靠

如果你确定你总是想要第一个结果,这可能会奏效

$ip = (ipconfig | findstr "IPv4")[0].split(':')[1].trim()
或者(更长但更清晰)

…但最好使用更具体的方法查找您要更改的地址

类似地,以下行可以返回单个对象或数组:

$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "Description LIKE '%Intel%'"
如果有多个接口与过滤器匹配(考虑到虚拟接口过多是很常见的情况,这不太可能),则在尝试调用EnableStatic时会出现错误。同样,您可以将
|选择-First 1
钉在末尾,或者将所有内容都放在
=
()[0]
右侧。但是,为了使主界面更有可能得到单一结果,请尝试以下方法:

$wmi = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Description LIKE '%Intel%' AND IPEnabled = 'True'"