Mehrere Parameter an zweites Powershell Script übergeben
Hallo zusammen,
Ich habe ein Script aus dem u.A. 3 Variablen hervorgehen, die ich gern als Parameter an ein zweites Script übergeben möchte
Script1:
Script2:
In Script1 starte ich nun den Aufruf von Script2 mit
Leider führt das immer zu folgendem Fehler:
was mache ich falsch?
Ich habe ein Script aus dem u.A. 3 Variablen hervorgehen, die ich gern als Parameter an ein zweites Script übergeben möchte
Script1:
$old_version
$new_version
$new_version_name
Script2:
param (
[Parameter(Mandatory=$true)][String]$old_version,
[Parameter(Mandatory=$true)][String]$new_version,
[Parameter(Mandatory=$true)][String]$new_version_name
)
...
...
...
In Script1 starte ich nun den Aufruf von Script2 mit
start-process ".\Script2.ps1" -Argumentlist $old_version $new_version $new_version_name
Leider führt das immer zu folgendem Fehler:
Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "<neue Versionsnummer>" akzeptiert.
was mache ich falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83745699982
Url: https://administrator.de/contentid/83745699982
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
8 Kommentare
Neuester Kommentar
start-process powershell -NoNewWindow -wait -Argumentlist "-File `"Pfad\zu\script2.ps1`" -old_version $old_version -new_version $new_version -new_version_name $new_version_name"
&'.\script2.ps1' -old_version $old_version -new_version $new_version -new_version_name $new_version_name
https://tio.run/##nY7BCsIwDIbveYochp3gKptnYewuCB7HGIVFHcx2tJlD8N1rFYSKF/ ...
Hatten wir doch vorhin schon ?! 🤔
Powershell Leitfaden für Anfänger
Hatten wird doch gerade erst ...🤔 wenn Variablen im String vorhanden sind darf man nur Anführungszeichen benutzen keine Hochkommas, wann liest du endlich mal das Handbuch ?!
Variable expansion in strings and here-strings
i'm out.
&".\Script2$var1.ps1" ..........
i'm out.
Dann gibt es das Skript mit dem Namen nicht im aktuellen Verzeichnis (Working Directory)
Bedenke das Working Directory nicht unbedingt gleich der Skript-Directory sein muss!
Wenn du also auf ein Skript im selben Ordner wie das aktuelle Skript verweisen willst solltest du die $psscriptroot Variable verwenden
Bedenke das Working Directory nicht unbedingt gleich der Skript-Directory sein muss!
Wenn du also auf ein Skript im selben Ordner wie das aktuelle Skript verweisen willst solltest du die $psscriptroot Variable verwenden
& "$psscriptroot\Script2$var1.ps1" ..........
Hi!
So funkt das nicht. Sollte in etwa so aussehen:
Call:
in einer Function verdröselt:
Call:
und falls es zwackt mit der Execution-Policy so:
Oder in einem Modul (psm1). Ein Modul setzt ebenfalls Functions voraus (also wie im 2. Beispiel) nur dann eben als Mein.psm1. Das Modul vorher importieren und dann ganz einfach aufrufen wie im Beispiel oben. Also so:
Grüße
Ich habe ein Script aus dem u.A. 3 Variablen hervorgehen, die ich gern als Parameter an ein zweites Script übergeben möchte. [...] In Script1 starte ich nun den Aufruf von Script2 mit
start-process ".\Script2.ps1" -Argumentlist $old_version $new_version $new_version_name
So funkt das nicht. Sollte in etwa so aussehen:
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false)][String]$old_version,
[Parameter(Mandatory=$false)][String]$new_version,
[Parameter(Mandatory=$false)][String]$new_version_name
)
PROCESS {
...
}
Call:
powershell.exe -file "C:\Set-Version.ps1" -old_version "4321" -new_version "1234" -new_version_name "mama"
in einer Function verdröselt:
Function Set-Version() {
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false)][String]$old_version,
[Parameter(Mandatory=$false)][String]$new_version,
[Parameter(Mandatory=$false)][String]$new_version_name
)
BEGIN {
[string[]]$ArrList += $new_version;
$ArrList += $old_version
$ArrList += $new_version_name
}
PROCESS {
return $ArrList
}
}
Call:
powershell -command "& { . "c:\Set-Version.ps1"; Set-Version -old_version "1.2.3.4" -new_version "2.3.4.5" -new_version_name "Meine Mama" }"
und falls es zwackt mit der Execution-Policy so:
powershell -ep Bypass -command "& { . "c:\Set-Version.ps1"; Set-Version -old_version "1.2.3.4" -new_version "2.3.4.5" -new_version_name "Meine Mama" }"
Oder in einem Modul (psm1). Ein Modul setzt ebenfalls Functions voraus (also wie im 2. Beispiel) nur dann eben als Mein.psm1. Das Modul vorher importieren und dann ganz einfach aufrufen wie im Beispiel oben. Also so:
#Annahme dein Modul heißt "Mein.psm1" und liegt auf C:\
Import-Module "C:\Mein.psm1"
$old_version = '1.2.3.4'
$new_version = '2.3.4.5'
$new_version_name = 'Meine Mama'
Set-Version -old_version $old_version -new_version $new_version -new_version_name $new_version_name
Grüße