Wie mache ich das in PowerShell?
Wie kann ich in PowerShell das so machen, dass wenn ich jetzt z.B. im Skriptx die Zahl 3 eingebe und da 7 rauskommt, das Programm noch nicht beendet wird, sondern die Ausgabe 7 dann im Skripty weiter verarbeitet wird?
Muss ich da irgendwie z.B. Skriptx 3 > Skripty eingeben?
Bitte nicht antworten wie, mach doch einfach beide Skripte in einem oder so. Ich muss das grad lernen, ich kann nicht entscheiden, wie ich das mache.
2 Antworten
muss das grad lernen
WTF... wer bringt Dir denn bei das man externe Scripte aufruft? Mach kein Schwein . Jeder Aufruf eines anderen Scripts bedeute einen Performanceverlust, es müssen jedesmal neue Instanzen von Powershell eingerichtet werden. Zudem kann das versehentliche direkte Ausführen eines Scripts, welches Parameter erwartet unerwünschte Efekte haben.
wenn das "muss" von Deinem Lehrer kommt: schönen Gruß von mir ... sowas tut man nicht!
Entweder man bindet externe Funktionen als Module ein, oder man definiert Funktionen innerhalb des Scripts
...egal...
Ein Script, dem etwas übergeben werden soll muss auch fähig sein, die Daten entgegenzunehmen.
- https://www.red-gate.com/simple-talk/sysadmin/powershell/how-to-use-parameters-in-powershell/
- https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scripts?view=powershell-5.1
- https://learn.microsoft.com/de-de/powershell/scripting/learn/ps101/04-pipelines?view=powershell-5.1
- https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-5.1
...Butter bei die Fische...
Das Hauptscript, welches andere ausführt:
Main.ps1
Write-Host "Ich bin das Script: $($MyInvocation.MyCommand)" -fo green
#einfach mal ein paar Parameter an ein anderes Script übergeben
&.\SlaveAnonArgs.ps1 2 9 '1.Aufruf' 666 (997..999)
Write-Host "wieder zurueck: $($MyInvocation.MyCommand)" -fo green
#einfach ein Ergebnis übergeben und einen eventiellen Rückgabewert in eine Variable spechern
$MyVariable = 3+4 #sollte 7 sein 🥱
$Ergebnis= &.\SlaveAnonArgs.ps1 $MyVariable 100
Write-Host "SlaveAnonArgs.ps1 hat $Ergebnis zurueckgeliefert" -fo green
#was du bei einer Funktio/Script , weches Anonyme Parameter entgennimmt nichttun kannst ist,
#etwas direkt über eine Piplien zuweisen.
#das geht nicht: &.\SlaveAnonArgs.ps1 $MyVariable 100 5|&.\SlaveAnonArgs.ps1 5
#zur Übergabe An Funktionen, weche nicht explizit für Piped-Parameter pepariert wurden,
#benutzt man ForEach-Object{} (alias %{})
$Ergebnis2= &.\SlaveAnonArgs.ps1 3 9|ForEach-Object{&.\SlaveAnonArgs.ps1 $_ 5 }
Write-Host "Die Pipeline hat $Ergebnis2 zurueckgeliefert" -fo green
#soviel zum Thema anonyme Argumente
#Gute Funktonen/Scripte haben definierte Parameter
Write-Host "`n`n...weite Blah&blubbb..." -fo green
$Ergebnis3 = &.\SlaveNameParams.ps1 5 6
Write-Host "SlaveNameParams.ps1 hat $Ergebnis3 zurueckgeliefert" -fo green
#da dieses Script direct Daten an $MyVar1 über die Pipline empfangen kann geht es ohne ForEach...
#!!!!die übrigen Parameter müssen "Named" übergen werden!!!
$Ergebnis4 = &.\SlaveNameParams.ps1 6 7|&.\SlaveNameParams.ps1 -MyVar2 7
Write-Host "Die Pipe hat $Ergebnis4 zurueckgeliefert" -fo green
#natürlich gehts auch mit Foreach-Object...
$Ergebnis5 = &.\SlaveNameParams.ps1 2 3|%{&.\SlaveNameParams.ps1 $_ $_}
Write-Host "Die Pipe hat $Ergebnis5 zurueckgeliefert" -fo green
pause
...und die beiden andern ...
SlaveAnonArgs.ps1
Write-Host "Ich bin das Script: $($MyInvocation.MyCommand)" -fo red
Write-Host "Ich habe folgende Parameter uebernommen" -fo red
$args|%{$($i=0)}{
Write-Host "`$arg[$i]=$_" -fo darkred
$i++
}
# lass uns mal mit den ersten beiden Parametern arbeiten
$MyVar1=$args[0]
$MyVar2=$args[1]
Write-Host "rechne $MyVar1 * $MyVar2" -fo red
$mul = $MyVar1 * $MyVar2
#aus-/zurückgeben
$mul
SlaveNameParams.ps1
param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true)] [int]$MyVar1,
[Parameter(Mandatory = $true)] [int]$MyVar2
)
Write-Host "Ich bin das Script: $($MyInvocation.MyCommand)" -fo magenta
Write-Host "rechne $MyVar1 * $MyVar2" -fo mag
#einfach Ergebnis zurück...
$MyVar1 * $MyVar2
...Bunt... damit man sieht wer was Tut

Ich muss das grad lernen
ok.... dann hast du hier ein Stichwort für deine Suche und kannst dir dann die zugehörigen MS-Dokumentationen (oder sonstige Quellen) anschauen.
Parameter!