C'est un problème désagréable auquel je suis confronté. Je ne serai pas surpris s'il a une solution simple, juste que cela m'échappe.
J'ai 2 fichiers batch que je dois convertir en scripts PowerShell.
file1.bat
---------
echo %1
echo %2
echo %3
file2.bat %*
file2.bat
--------
echo %1
echo %2
echo %3
Sur la ligne de commande, j'appelle ceci comme C:> file1.bat un deux trois La sortie que je vois est comme prévu un deux trois un deux trois
(Ceci est un exemple de code brut)
Lorsque je me convertis à Powershell, j'ai
file1.ps1
---------
Write-Host "args[0] " $args[0]
Write-Host "args[1] " $args[1]
Write-Host "args[2] " $args[2]
. ./file2.ps1 $args
file2.ps1
---------
Write-Host "args[0] " $args[0]
Write-Host "args[1] " $args[1]
Write-Host "args[2] " $args[2]
When I invoke this on powershell command line, I get
$> & file1.ps1 one two three
args[0] one
args[1] two
args[2] three
args[0] one two three
args[1]
args[2]
Je comprends que c'est parce que $ args utilisé dans file1.ps est un System.Object [] au lieu de 3 chaînes.
J'ai besoin d'un moyen de transmettre les $ args reçus par file1.ps1 à file2.ps1, de la même manière que celle obtenue par% * dans les fichiers .bat.
J'ai peur, la manière existante se cassera même si c'est un appel inter-fonctions, tout comme son appel inter-fichiers dans mon exemple.
J'ai essayé quelques combinaisons, mais rien ne fonctionne.
Aide aimablement. Je l'apprécierais beaucoup.
Dans PowerShell V2, c'est trivial avec les éclaboussures. bar devient juste:
function bar { foo @args }
Le fractionnement traitera les membres du tableau comme des arguments individuels au lieu de le passer comme un seul argument du tableau.
Dans PowerShell V1 c'est compliqué, il y a un moyen de le faire pour les arguments positionnels. Étant donné une fonction foo:
function foo { write-Host args0 $args[0] args1 $args[1] args2 $args[2] }
Maintenant, appelez-le depuis la barre en utilisant la méthode Invoke()
sur le bloc de script de la fonction foo
function bar { $OFS=','; "bar args: $args"; $function:foo.Invoke($args) }
Qui ressemble
PS (STA) (16)> barre 1 2 3 Barre args: 1,2,3 Args0 1 args1 2 args2 3
lorsque vous l'utilisez.
# use the pipe, Luke!
file1.ps1
---------
$args | write-Host
$args | .\file2.ps1
file2.ps1
---------
process { write-Host $_ }