Erledigt Powershell-Skript Problem

Hallo Boardies,

habe da mal ne Frage zu Powershell und komme hier nicht weiter.
Ich möchte eine beliebige Anzahl von Containern automatisch starten.

Code:
for ($i = 0; $i -lt 10; $i++)
{
    $Name="Docker$i"
    Write-Host $Name
    pause
    $p = 9080+$i
    Write-Host $p
    pause
    docker run --name $Name -it --isolation hyperv --network nat -p "$p":433 --rm -d "Docker_Image"
    Write-Host "docker run --name $Name -it --isolation hyperv --network nat -p "$p":443 --rm -d "Docker_Image""
    pause
}

Nun bekomme ich für die Zeile
Code:
docker run --name $Name -it --isolation hyperv --network nat -p "$p":433 --rm -d "Docker_Image"
die Meldung, dass der den Zähler nicht korrekt auswerten kann. Invalid Container Port oder Invalid Format.

In der Ausgabe
Code:
Write-Host "docker run --name $Name -it --isolation hyperv --network nat -p "$p":443 --rm -d "Docker_Image""
sieht alles gut aus.

@dr_tommi
In Ordnung. Hast mich erwischt. :icon_lol:
Frage:
1) Wie muss ich korrigieren, damit der [Zähler] korrekt auswertet wird?


Code:
docker run --name $Name -it --isolation hyperv --network nat -p [Zähler]:433 --rm -d "Docker_Image"

Bin wie immer für jeden Tipp dankbar und bitte bleibt alle Gesund!
 
Zuletzt bearbeitet:

DrSnuggles

Bekanntes Mitglied
Hab zwar kein Docker, aber das müsste passen
Code:
for ($i = 0; $i -lt 10; $i++) {
  $p = 9080+$i
   Write-Host ("{0}:443" -f $p)
}
 

dr_tommi

alter Oldie
Code:
for ($i = 0; $i -lt 10; $i++)
{
    $Name="Docker$i"
    Write-Host $Name
    pause
    $p = 9080+$i
    Write-Host $p
    pause
    docker run --name $Name -it --isolation hyperv --network nat -p "$p":433 --rm -d "Docker_Image"
    Write-Host "docker run --name $Name -it --isolation hyperv --network nat -p "$p":443 --rm -d "Docker_Image""
    pause
}
Dein Problem ist die Tatsache dass du bei der Ausgabe und beim Aufruf etwas großzügig mit den Anführungszeichen umgehst.
Beim Aufruf
Code:
docker run --name $Name -it --isolation hyperv --network nat -p "$p":433 --rm -d "Docker_Image"
ist nur der Parameter in Anführungszeichen
Code:
    Write-Host "docker run --name $Name -it --isolation hyperv --network nat -p "$p":443 --rm -d "Docker_Image""
Ist der Parameter $p das einzige was nicht in Anführungszeichen steht.
Ich glaube dass dabei der Doppelpunkt Probleme bereitet wenn er so direkt in der Powershellzeile steht
Deshalb lasse ich in diesem Beispiel die Daten schon in einer Stringvariablen speichern


Ich habe als Docker mal nur eine Batchdatei genommen, die nichts weiter macht als mit "echo %*" alle übergebenen Parameter auszugeben.

Code:
for ($i = 0; $i -lt 10; $i++)
{
    $Name="Docker$i"
    $q=9080+$i
    $p = [string]$q+":443"
    docker run  --name $Name -it --isolation hyperv --network nat -p $p --rm -d "Docker_Image"
  
}
Bei wird dann als Ausgabe der übergebenen Parameter folgendes angezeigt:

Code:
docker run --name Docker0 -it --isolation hyperv --network nat -p 9080:443 --rm -d Docker_Image
docker run --name Docker1 -it --isolation hyperv --network nat -p 9081:443 --rm -d Docker_Image
docker run --name Docker2 -it --isolation hyperv --network nat -p 9082:443 --rm -d Docker_Image
docker run --name Docker3 -it --isolation hyperv --network nat -p 9083:443 --rm -d Docker_Image
docker run --name Docker4 -it --isolation hyperv --network nat -p 9084:443 --rm -d Docker_Image
docker run --name Docker5 -it --isolation hyperv --network nat -p 9085:443 --rm -d Docker_Image
docker run --name Docker6 -it --isolation hyperv --network nat -p 9086:443 --rm -d Docker_Image
docker run --name Docker7 -it --isolation hyperv --network nat -p 9087:443 --rm -d Docker_Image
docker run --name Docker8 -it --isolation hyperv --network nat -p 9088:443 --rm -d Docker_Image
docker run --name Docker9 -it --isolation hyperv --network nat -p 9089:443 --rm -d Docker_Image
Also wenn ich mich nicht irre genau das , was du haben willst.

Die "Lösung" von @DrSnugglesgeht natürlich auch. ;)

Code:
for ($i = 0; $i -lt 10; $i++)
{
    $Name="Docker$i"
    $q=9080+$i
    dockerrun  --name $Name -it --isolation hyperv --network nat -p ("{0}:443" -f $q) --rm -d "Docker_Image"
    
}
 
Oben Unten