Here are a couple of user docker powershell utility scripts
ConvertFrom-Docker.psm1 – this will take the output from something like
docker ps
and convert it to something like this
docker ps | ConvertFrom-Docker ContainerId : fbf1955f00a9 Image : portainer/portainer Created : About an hour ago Status : Up About an hour Ports : 0.0.0.0:9000->9000/tcp Name : portainer
Here is the code
function PascalName($name){ $parts = $name.Split(" ") for($i = 0 ; $i -lt $parts.Length ; $i++){ $parts[$i] = [char]::ToUpper($parts[$i][0]) + $parts[$i].SubString(1).ToLower(); } $parts -join "" } function GetHeaderBreak($headerRow, $startPoint=0){ $i = $startPoint while( $i + 1 -lt $headerRow.Length) { if ($headerRow[$i] -eq ' ' -and $headerRow[$i+1] -eq ' '){ return $i break } $i += 1 } return -1 } function GetHeaderNonBreak($headerRow, $startPoint=0){ $i = $startPoint while( $i + 1 -lt $headerRow.Length) { if ($headerRow[$i] -ne ' '){ return $i break } $i += 1 } return -1 } function GetColumnInfo($headerRow){ $lastIndex = 0 $i = 0 while ($i -lt $headerRow.Length){ $i = GetHeaderBreak $headerRow $lastIndex if ($i -lt 0){ $name = $headerRow.Substring($lastIndex) New-Object PSObject -Property @{ HeaderName = $name; Name = PascalName $name; Start=$lastIndex; End=-1} break } else { $name = $headerRow.Substring($lastIndex, $i-$lastIndex) $temp = $lastIndex $lastIndex = GetHeaderNonBreak $headerRow $i New-Object PSObject -Property @{ HeaderName = $name; Name = PascalName $name; Start=$temp; End=$lastIndex} } } } function ParseRow($row, $columnInfo) { $values = @{} $columnInfo | ForEach-Object { if ($_.End -lt 0) { $len = $row.Length - $_.Start } else { $len = $_.End - $_.Start } $values[$_.Name] = $row.SubString($_.Start, $len).Trim() } New-Object PSObject -Property $values } function ConvertFrom-Docker(){ begin{ $positions = $null; } process { if($positions -eq $null) { # header row => determine column positions $positions = GetColumnInfo -headerRow $_ #-propertyNames $propertyNames } else { # data row => output! ParseRow -row $_ -columnInfo $positions } } end { } } Export-ModuleMember -Function * -Alias * # e.g. : # docker --tls ps -a --no-trunc | ConvertFrom-Docker | ft
.\Docker-Utils.psm1 – this is a set of utility functions and aliases that make life a littler easier.
docke-ps-ext # retrieve docket ps info with IP address ContainerId : fbf1955f00a9 Image : portainer/portainer Created : About an hour ago Status : Up About an hour Ports : 0.0.0.0:9000->9000/tcp Name : portainerIPAddress : 172.22.232.8
Here is the code
function Docket-Get-IP() { param ([string] $containerId) return docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $containerId } function Docker-List-IPAddress { docker ps | ConvertFrom-Docker | % { $dc = New-Object PSObject -Property @{ ContainerId=""; Image=""; Created=""; Status=""; Ports=""; Name=""; IPAddress="" } $dc.ContainerId = $_.ContainerId $dc.Image = $_.Image $dc.Created = $_.Created $dc.Status = $_.Status $dc.Ports = $_.Ports $dc.Name = $_.Names $dc.IPAddress = (Docket-Get-IP($_.ContainerId)) $dc | Select ContainerId, Image, Created, Status, Ports, Name, IPAddress } } Remove-Item docker-ips -ErrorAction SilentlyContinue Set-Alias -Scope Global -Name docker-ps-ext -Value Docker-List-IPAddress