# 物理网卡
foreach ($NetAdapter in Get-NetAdapter -Physical) {
    $Name = $NetAdapter.Name
    $MACAddress = $NetAdapter.MACAddress -replace '-', ':' 

    # IP条目
    $IPEntries = (Get-NetIPAddress -InterfaceAlias $Name | 
        Where-Object {
            $_.PrefixOrigin -match "RouterAdvertisement|DHCP|Manual" -and 
            $_.AddressState -eq "Preferred" 
        })

    if (!$IPEntries) {
        continue;
    }
   
    # IPv4
    foreach ($IPEntry in $IPEntries) {
        if ($IPEntry.AddressFamily -eq "IPv4") {
            $IPAddress4 = $IPEntry.IPAddress
            $PrefixLength4 = $IPEntry.PrefixLength
            break
        }
    }

    # IPv6
    foreach ($IPEntry in $IPEntries) {
        if ($IPEntry.AddressFamily -eq "IPv6") {
            $IPAddress6 = $IPEntry.IPAddress
            $PrefixLength6 = $IPEntry.PrefixLength
            break
        }
    }
 
    # IPv4 网关
    foreach ($NetRoute in Get-NetRoute | Where-Object {
            $_.InterfaceAlias -eq $Name -and
            $_.DestinationPrefix -eq "0.0.0.0/0"
        }) {
        $DefaultIPGateway4 = $NetRoute.NextHop
        break
    }

    # IPv6 网关
    foreach ($NetRoute in Get-NetRoute | Where-Object {
            $_.InterfaceAlias -eq $Name -and
            $_.DestinationPrefix -eq "::/0"
        }) {
        $DefaultIPGateway6 = $NetRoute.NextHop
        break
    }
   
    $OutputObj = New-Object -Type PSObject -Property @{
        MACAddress        = "$MACAddress".ToLower() # 和linux保持一致
        IPAddress4        = $(If ($IPAddress4) { "$IPAddress4/$PrefixLength4" })
        IPAddress6        = $(If ($IPAddress6) { "$IPAddress6/$PrefixLength6" })
        DefaultIPGateway4 = $DefaultIPGateway4
        DefaultIPGateway6 = $DefaultIPGateway6
    }

    # 按指定顺序输出
    $OutputObj | Select-Object MACAddress, IPAddress4, IPAddress6, DefaultIPGateway4, DefaultIPGateway6 
    break
}