使用 PowerShell 分配静态 IP 地址

Posted

技术标签:

【中文标题】使用 PowerShell 分配静态 IP 地址【英文标题】:Assign a static IP address using PowerShell 【发布时间】:2021-10-15 08:58:47 【问题描述】:

我是 PowerShell 的初学者。我正在尝试获取下面的两行代码,这些代码是我在另一个答案中找到的,可以在 PowerShell 5 中运行。

$netAdapter = Get-WmiObject Win32_NetworkAdapterConfiguration | where $_.MACAddress -eq '0F:98:90:D6:42:92'
$netAdapter.EnableStatic("192.168.1.1", "255.255.255.0")

是否需要额外的代码才能正确执行?

我收到错误消息“您不能在空值表达式上调用方法。”当我尝试使用它时。我用我的设备和网络的数据替换了 MAC 地址和 IP 地址。我想也许第二个命令会返回一个值,但如果这是问题,我无法弄清楚数据类型。

在过去,我使用 Bootp 分配 IP 地址,其中非 PC 设备只有 MAC 地址而没有有效的 IP 地址。 Bootp 没有为我的设备显示广播,但我可以在 WireShark 中看到它。

【问题讨论】:

你检查$netAdapter的内容是什么了吗?该代码来自什么问题?如果你在 PS5 上,你应该可以使用 Get-NetAdapterSet-NetIPAddress,这应该更容易使用。 【参考方案1】:

我不能对您的代码 sn-p 说太多,但我个人会尽可能避免通过 Get-WmiObject 进行“转移”。在这种情况下,这也很容易实现。

这段代码:

$netAdapter = Get-NetAdapter | Where-Object $_.MacAddress -eq '0F:98:90:D6:42:92'
New-NetIPAddress -AddressFamily IPv4 -InterfaceIndex $netAdapter.ifIndex -IPAddress 192.168.1.1 -PrefixLength 24

是 100% 没有 Wmi 的 PowerShell,应该可以正常工作。 (需要管理员权限,这可能是您的代码的问题)。

【讨论】:

通过管道到New-NetIPAddress cmdlet 可以将其缩短为仅一行,但如果仍然启用 DHCP,至少我会收到错误消息。可以使用Get-NetAdapter | Where-Object $_.MacAddress -eq '0F:98:90:D6:42:92' | Set-NetIPInterface -Dhcp disabled -PolicyStore activestore 禁用它。可能需要重新启动。

以上是关于使用 PowerShell 分配静态 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

路由器静态IP时,如何分配设置各个电脑的IP地址?

powershell自动添加静态IP

在路由器中DHCP服务器里设置静态地址分配有啥作用

dhcp地址分配与静态设置IP会有冲突吗?

什么叫动态IP,什么叫静态IP在操作系统里怎样改?

linux系统开机静态分配ip地址