src/public/Get-InternalIP.ps1

<#
.SYNOPSIS
    Retrieves internal IP addresses and network adapter details.
 
.DESCRIPTION
    This function retrieves internal IP addresses and network adapter details for all active network interfaces.
    It includes information such as adapter name, description, IP address, subnet mask, gateway, and DNS servers.
 
.OUTPUTS
    PSCustomObject
    Returns a custom object containing network adapter details.
 
.EXAMPLE
    Get-InternalIP
    Retrieves internal IP addresses and details for all active network adapters.
 
#>

Function Get-InternalIP {
    [CmdletBinding()]
    param (

    )

    Begin {
        $adapters = @()
    }

    Process {

        $ipv4Config = Get-NetIPConfiguration | Where-Object { $null -ne $_.IPv4Address }

        Foreach ($adapter in $ipv4Config) {
        
            If ($Adapter.InterfaceAlias -eq "vEthernet (Default Switch)") {
                continue
            }
            If ($adapter.NetAdapter.Status -ne "Up") {
                $adapters += [PSCustomObject]@{
                    Adapter     = $Adapter.InterfaceAlias
                    Description = $Adapter.InterfaceDescription
                    Status      = $Adapter.NetAdapter.Status
                }
            }
            else {

                $adapters += [PSCustomObject]@{
                    Adapter         = $Adapter.InterfaceAlias
                    Description     = $Adapter.InterfaceDescription
                    IPv4Address     = $Adapter.IPv4Address.IPAddress
                    SubnetMask      = Convert-PrefixToSubnetMask ($Adapter.IPv4Address.prefixLength)
                    Gateway         = $Adapter.IPv4DefaultGateway.NextHop
                    DnsServers      = $Adapter.DnsServer.ServerAddresses
                    PrefixLength    = $Adapter.IPv4Address.PrefixLength
                    IPConfiguration = $Adapter.IPv4Address.PrefixOrigin
                    Status          = "Up"
                }
            }
        }

        Write-Output $adapters

    }

    End {

    }
}