NetConfiguration.psm1

function Get-NetInterface {
    [CmdletBinding(DefaultParameterSetName='name')]
    param(
        [Parameter(ParameterSetName='index', Mandatory=$false)]
        [ArgumentCompleter({
            param(
                $commandName,
                $parameterName,
                $wordToComplete,
                $commandAst,
                $fakeBoundParameters
            )

            (Get-NetInterface).Index | Where-Object { "$_" -like "$wordToComplete*" }
        })]
        [int]
        $Index,

        [Parameter(ParameterSetName='name', Mandatory=$false, Position=0, ValueFromPipelineByPropertyName)]
        [ArgumentCompleter({
            param(
                $commandName,
                $parameterName,
                $wordToComplete,
                $commandAst,
                $fakeBoundParameters
            )

            $quote = ""
            if ($wordToComplete.StartsWith("'")) {
                $quote = "'"
            }
            elseif ($wordToComplete.StartsWith('"')) {
                $quote = '"'
            }

            if ($wordToComplete.EndsWith("'") -or $wordToComplete.EndsWith('"')) {
                $wordToComplete = $wordToComplete.Substring(0, $wordToComplete.Length - 1)
            }

            $results = (Get-NetInterface).Name | Where-Object { "$quote$_$quote" -like "$wordToComplete*" }
            $results | ForEach-Object {
                if ($_.Contains(' ')) {
                    "'$_'"
                }
                else {
                    $_
                }
            }
        })]
        [string]
        $Name
    )

    $interfaces = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()
    if ($Index) {
        $interfaces | Where-Object { $_.Index -eq $Index }
    }
    elseif ($Name) {
        $interfaces | Where-Object { $_.Name -eq $Name }
    }
    else {
        $interfaces
    }
}

function Resolve-Dns {
    [CmdletBinding()]
    param(
        [string] $Name
    )

    [System.Net.Dns]::Resolve($Name)
}