获取没有网关的计算机的网络适配器的IP地址

Get IP address of the Network Adapter of a computer having No gateway

我有一个项目要通过 Powershell 在服务器列表上添加持久路由。我们的环境每台服务器都有 2 个 NIC,一个生产一个备份。为此,我需要获取计算机的备份 IP 地址,将最后一个八位字节替换为 1,并在 'route add' 命令中使用它。 我认为识别备份 NIC 的唯一方法是识别没有网关的 NIC(生产 NIC 有默认网关,而备份 NIC 没有)。 因此,我的第一步是确定没有网关的 NIC 的静态 IP 地址,即默认网关部分是空的,但是静态 IP 和子网掩码在那里。 到目前为止,我已经尝试过以下方法但没有成功:

Get-WmiObject win32_NetworkAdapterConfiguration -Filter DefaultIPGateway=NULL | Select IPAddress

错误 - Get-WmiObject:无效查询

Get-WmiObject win32_NetworkAdapterConfiguration -Filter DefaultIPGateway="" | Select IPAddress

错误 - Get-WmiObject:无效查询

我还尝试了以下代码,这在我的脑海中合乎逻辑地出现了:

$ntwk=Get-WmiObject win32_NetworkAdapterConfiguration | Select IPAddress,DefaultIPGateway
forearch($net in $ntwk) 
{
 if($net.DefaultIPGateway -eq "")
 {
  Write-Output "IP of NIC with NO gateway is: "$net.IPAddress
 }
}

错误 - Get-WmiObject:无效查询

有人可以帮我解决这个问题吗?希望我清楚我的查询。 提前致谢!

您没有指定您使用的是哪个 PowerShell 版本。如果你有幸拥有 PowerShell 4.0,你还可以使用 Get-NetIPConfiguration:

Get-NetIPConfiguration | where {$_.IPv4DefaultGateway -eq $null }
$configs=gwmi win32_networkadapterconfiguration | where {$_.ipaddress -ne $null -and $_.defaultipgateway -eq $null}
if ($configs -ne $null) { $yourtargetIP= $configs[0].IPAddress[0] }
# $yourtargetIP will have the IP address to make the gateway from

事实上,如果您的网卡上有多个 IPv4 地址,$configs[0].IPAddress 将一一拥有。此外,您可以在单个网络适配器上分配两个不同的 IP 地址。因此,如果您在您的组织中找到这样的服务器,则需要对其进行定制,但如果您的所有网络适配器都有一个 IPv4 地址,它将正常工作。

Get-NetIPConfiguration |select IPv4Address、InterfaceAlias