Public/Get-Container.ps1

Register-ArgumentCompleter -CommandName Get-DockerContainer -ParameterName Name -ScriptBlock $ContainerNameCompleter

function Get-Container {

    <#
 
    .SYNOPSIS
    Get docker container
 
    .DESCRIPTION
    Returns references to docker containers of a docker service.
    It can be filtered by name and status.
    Wraps the command `docker ps`.
 
    .LINK
    https://docs.docker.com/engine/reference/commandline/ps/
 
    .OUTPUTS
    Container: It returns a `Container` object for each container matching the parameters.
 
    .EXAMPLE
    PS C:\> New-DockerContainer -Image 'microsoft/nanoserver' -Name 'mycontainer' | Out-Null
    PS C:\> Get-DockerContainer -Name 'mycontainer'
    Image : microsoft/nanoserver
    Ports :
    Command : "c:\\windows\\system32\\cmd.exe"
    Created : 13 seconds ago
    Name : mycontainer
    ContainerID : 1c3bd73d25552b41a677a99a15a9326ba72123096f9e10c3d36f72fb90e57f16
    Status : Exited (0) 5 seconds ago
 
    #>


    [CmdletBinding()]
    param (
        # Specifies if only running containers should be returned.
        [Parameter(Mandatory=$false)]
        [switch] $Running,

        # Specifies if only the latest created container should be returned.
        [Parameter(Mandatory=$false)]
        [switch] $Latest,

        # Specifies if only the container with the given name should be returned.
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [string] $Name,

        # Specifies the number of seconds to wait for the command to finish.
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [int] $Timeout = 1
    )

    $arguments = New-Object System.Collections.ArrayList

    if ( $Running -eq $false ) {
        $arguments.Add( '--all' ) | Out-Null
    }

    if ( $Latest ) {
        $arguments.Add( '--latest' ) | Out-Null
    }

    if ( $Name ) {
        $arguments.Add( "--filter name=$Name" ) | Out-Null
    }

    $arguments.Add( '--no-trunc' ) | Out-Null
    $arguments.Add( '--format="{{json .}}"' ) | Out-Null

    Invoke-ClientCommand 'ps', $arguments `
        -Timeout $Timeout `
        -JsonOutput |
    ForEach-Object {
        New-Object -TypeName Container -Property @{
            Command = $_.Command
            CreatedAt = $_.CreatedAt
            Id = $_.ID
            Image = $_.Image
            Labels = $_.Labels -split ','
            LocalVolumes = $_.LocalVolumes -split ','
            Mounts = $_.Mounts -split ','
            Names = $_.Names -split ','
            Networks = $_.Networks -split ','
            Ports = $_.Ports
            RunningFor = $_.RunningFor
            Size = $_.Size
            Status = $_.Status
        } | Write-Output
    } | Write-Output
}