Wie mache ich das in PowerShell?

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.

...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

Bild zum Beitrag

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
 - (Python, Programmiersprache, PowerShell)
 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!