1

In a powershell module there is a class with the following method (here simplified). It simply calls docker to automatically build an image.

Everything works and the image is correctly built. What I cannot understand is why the logs from docker are not printed in the console (as they do if I call the same docker command directly instead of inside a powershell module).

[void] BuildImage() {
    $imageId = ...
    docker build -f ../Dockerfile . -t $imageId
}
Franco Tiveron
  • 2,364
  • 18
  • 34
  • if the docker command is an external command a & at the start would be correct in anyway, even if it is not the root cause of the problem. & docker build -f ../Dockerfile . -t $imageId – Carsten.R May 05 '23 at 03:52

1 Answers1

1

You have a void method, it produces no output. If you want to send output to the success stream (stdout), then change the return type to [string[]] and use return:

[string[]] BuildImage() {
    $imageId = ...
    return docker build -f ../Dockerfile . -t $imageId
}

If instead you're interested in sending the output to the other PowerShell streams, you could try the following example which includes redirection of errors then checks if the output type was an ErrorRecord it sends it to the error stream otherwise it sends it to the information stream.

[void] BuildImage() {
    $imageId = ...
    docker build -f ../Dockerfile . -t $imageId 2>&1 | ForEach-Object {
        if($_ -is [System.Management.Automation.ErrorRecord]) {
            return Write-Error $_
        }

        Write-Host $_
    }
}
Santiago Squarzon
  • 41,465
  • 5
  • 14
  • 37