首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在powershell中获取ip详细信息

在powershell中获取ip详细信息
EN

Stack Overflow用户
提问于 2016-08-10 20:59:46
回答 1查看 1.9K关注 0票数 0

我试图从服务器上的ipconfig集中获取所有IPv4地址。

感谢Chris在获取ip详细信息的许多方法上共享信息/解决方案。

有效解决方案:

代码语言:javascript
复制
Get-WmiObject @params | Select-Object NetConnectionID, `
        @{Name='IPAddress'; Expression={
            $_.GetRelated('Win32_NetworkAdapterConfiguration') | ForEach-Object {
                [IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' }
            }
        }}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-10 21:31:15

除了上面的注释之外,这些示例使用WMI提取接口名称和IPv4地址。

根据最重要的是什么,有不同的方法可以得到这一点。也就是说,选择最方便的过滤风格的版本。

Win32_NetworkAdapterConfiguration和IPEnabled =真

如果您对所有启用IP的接口感兴趣,则非常有用。

代码语言:javascript
复制
Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled='TRUE'" |
    Select-Object @{n='NetConnectionID';e={ ($_ | Get-CimAssociatedInstance -ResultClassName Win32_NetworkAdapter).NetConnectionID }},
                  @{n='IPAddress';e={ [IPAddress[]]$_.IPAddress | Where-Object AddressFamily -eq 'InterNetwork' }}

Win32_NetworkAdapter与命名接口

如果您需要按名称定位接口并获取IP,则可能是最好的选择。

代码语言:javascript
复制
Get-CimInstance Win32_NetworkAdapter -Filter "NetConnectionID='Ethernet'" |
    Select-Object NetConnectionID,
                @{n='IPAddress';e={
                    [IPAddress[]]($_ | Get-CimAssociatedInstance -ResultClassName Win32_NetworkAdapterConfiguration).IPAddress |
                        Where-Object AddressFamily -eq 'InterNetwork'
                }}

Get-WmiObject

已经被取代,但是如果您更喜欢它的语法,下面是第一个示例。

代码语言:javascript
复制
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='TRUE'" |
    Select-Object @{n='NetConnectionID';e={ $_.GetRelated("Win32_NetworkAdapter") | ForEach-Object { $_.NetConnectionID } }},
                  @{n='IPAddress';e={ [IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' } }}

使用System.Net.NetworkInformation的

因为WMI不是唯一的方法,这也提供了很少工作的直接访问。

代码语言:javascript
复制
$Name = 'MGT'
[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() |
    Where-Object Name -eq $Name |
    Select-Object Name,
            @{n='IPAddress';e={ $_.GetIPProperties().UnicastAddresses.Address |
                Where-Object AddressFamily -eq 'Internetwork'
            }}

Get-NetworkInterface函数(PowerShell 2兼容)

此函数允许您按名称选择网络接口,以便检查IP地址。默认情况下,它返回所有命名接口的信息。

代码语言:javascript
复制
function Get-NetworkInterface {
    param(
        [String]$Name = '*',

        [String]$ComputerName
    )

    $params = @{
        Class = 'Win32_NetworkAdapter'
    }
    if ($Name.IndexOf('*') -gt -1) {
        $Name = $Name -replace '\*', '%'
        $params.Add('Filter', "NetConnectionID LIKE '$Name'")
    } else {
        $params.Add('Filter', "NetConnectionID='$Name'")
    }
    if ($ComputerName -ne '') {
        $params.Add('ComputerName', $ComputerName)
    }

    Get-WmiObject @params | Select-Object NetConnectionID, `
        @{Name='IPAddress'; Expression={
            $_.GetRelated('Win32_NetworkAdapterConfiguration') | ForEach-Object {
                [IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' }
            }
        }}
}

操作验证

此部分与PowerShell 2不兼容。这就是如何利用单元测试框架(在本例中为纠缠器 )来执行配置验证。

它展示了我的设想,您可以使用上面的函数来验证IP配置。

代码语言:javascript
复制
Import-Module Pester
Describe 'SomeServer' {
    $ComputerName = 'SomeServer'

    Context 'Network configuration' {
        It 'Should have the management interface set to 10.1.2.3' {
            (Get-NetworkInterface -Name 'MGMT' -ComputerName 'SomeServer').IPAddress | Should Be '10.1.2.3'
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38883433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档