functions/Get-DbaCmConnection.ps1

function Get-DbaCmConnection {
    <#
    .SYNOPSIS
    Retrieves windows management connections from the cache
 
    .DESCRIPTION
    Retrieves windows management connections from the cache
 
    .PARAMETER ComputerName
    The computername to ComputerName for.
 
    .PARAMETER UserName
    Username on credentials to look for. Will not find connections using the default windows credentials.
 
    .PARAMETER Silent
    Replaces user friendly yellow warnings with bloody red exceptions of doom!
    Use this if you want the function to throw terminating errors you want to catch.
 
    .NOTES
    Original Author: Fred Winmann (@FredWeinmann)
    Tags: ComputerManagement
 
    Website: https://dbatools.io
    Copyright: (C) Chrissy LeMaire, clemaire@gmail.com
    License: GNU GPL v3 https://opensource.org/licenses/GPL-3.0
 
    .LINK
    https://dbatools.io/Get-DbaCmConnection
 
    .EXAMPLE
    Get-DbaCmConnection
 
    List all cached connections.
 
    .EXAMPLE
    Get-DbaCmConnection sql2014
 
    List the cached connection - if any - to the server sql2014.
 
    .EXAMPLE
    Get-DbaCmConnection -UserName "*charles*"
 
    List all cached connection that use a username containing "charles" as default or override credentials.
    #>


    [CmdletBinding()]
    param
    (
        [Parameter(Position = 0, ValueFromPipeline = $true)]
        [Alias('Filter')]
        [String[]]
        $ComputerName = "*",

        [String]
        $UserName = "*",

        [switch]
        $Silent
    )

    BEGIN {
        Write-Message -Level InternalComment -Message "Starting"
        Write-Message -Level Verbose -Message "Bound parameters: $($PSBoundParameters.Keys -join ", ")"
    }
    PROCESS {
        foreach ($name in $ComputerName) {
            Write-Message -Level VeryVerbose -Message "Processing search. ComputerName: '$name' | Username: '$UserName'"
            ([Sqlcollaborative.Dbatools.Connection.ConnectionHost]::Connections.Values | Where-Object { ($_.ComputerName -like $name) -and ($_.Credentials.UserName -like $UserName) })
        }
    }
    END {
        Write-Message -Level InternalComment -Message "Ending"
    }
}