Public/Invoke-DockerLogin.ps1

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

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

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

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

        [Switch]
        $PassThru
    )
    [String] $plaintextPassword = [System.Net.NetworkCredential]::new("", $Password).Password
    $command = "Write-Output `"${plainTextPassword}`" | docker login --username `"${Username}`" --password-stdin ${Registry}".TrimEnd()
    $maskedCommand = $command.Replace($plaintextPassword, "*********")
    Write-Debug ($maskedCommand)
    [CommandResult] $commandResult = Invoke-Command $command
    if ($PassThru) {
        Write-PassThruOuput $($commandResult.Output)
    }
    # Mask password from being shown
    $commandResult.Command = $maskedCommand
    Assert-ExitCodeOK $commandResult
    return $commandResult
}