Public/Invoke-DockerLogin.ps1

. "$PSScriptRoot\..\Private\Write-PassThruOutput.ps1"

function Invoke-DockerLogin {
    [CmdletBinding(PositionalBinding = $false)]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        [String]
        $Username,

        [Parameter(Mandatory = $true, Position = 1)]
        [Securestring]
        $Password,

        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [String]
        $Registry,

        [Switch]
        $Quiet = [System.Convert]::ToBoolean($env:DOCKER_CI_QUIET_MODE)
    )
    [String] $plaintextPassword = [System.Net.NetworkCredential]::new("", $Password).Password
    $args = "login --username `"${Username}`" --password-stdin ${Registry}".TrimEnd()
    $maskedCommand = $args.Replace($plaintextPassword, "*********")

    [CommandResult] $commandResult = Invoke-Command 'docker' -CommandArgs $args -InputLines $plaintextPassword

    if (!$Quiet) {
        Write-CommandOuput $($commandResult.Output)
    }

    $commandResult.Command = $maskedCommand
    Assert-ExitCodeOK $commandResult
    return $commandResult
}