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

时间:2015-06-23 08:19:08

标签: powershell ip-address gateway

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

    foreach ($jsonmediationinfo as $value1) {
        if (array_key_exists('mstatus',$value1)) {
            echo $value1['mstatus'];
        } 
        print_r($jsonmediationinfo);
    }

错误 - Get-WmiObject:无效查询

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

错误 - Get-WmiObject:无效查询

此外,我尝试了以下代码,逻辑上出现在我的脑海中:

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

错误 - Get-WmiObject:无效查询

有人可以帮助我,我怎么能实现这个目标?希望我清楚我的疑问。 提前谢谢!

3 个答案:

答案 0 :(得分:2)

您尚未指定要使用的PowerShell版本。如果您有幸拥有PowerShell 4.0,您也可以使用Get-NetIPConfiguration

Get-NetIPConfiguration | where {$_.IPv4DefaultGateway -eq $null }

答案 1 :(得分:2)

Get-NetIPConfiguration |选择IPv4Address,InterfaceAlias

答案 2 :(得分:1)

$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地址,则可以正常工作。