Appel de script PowerShell avec des arguments à partir d'un autre script powershell
Comment appelez-vous un script PowerShell qui prend des arguments nommés à partir de l'intérieur d'un script PowerShell?
foo.ps1:
param(
[Parameter(Mandatory=$true)][String]$a='',
[Parameter(Mandatory=$true)][ValidateSet(0,1)][int]$b,
[Parameter(Mandatory=$false)][String]$c=''
)
#stuff done with params here
bar.ps1
#some processing
$ScriptPath = Split-Path $MyInvocation.InvocationName
$args = "-a 'arg1' -b 2"
$cmd = "$ScriptPath\foo.ps1"
Invoke-Expression $cmd $args
Erreur:
Invoke-Expression : A positional parameter cannot be found that accepts
argument '-a MSFT_VirtualDisk (ObjectId =
"{1}\\YELLOWSERVER8\root/Microsoft/Windo...).FriendlyName -b 2'
C'est ma dernière tentative, j'ai essayé plusieurs méthodes de googler aucune ne semble fonctionner.
Si je lance foo.ps1 à partir du shell terminal ./foo.ps1 -a 'arg1' -b 2
qu'il fonctionne comme prévu.
Alors que vous avez trouver une réponse à cette question en particulier, les meilleures pratiques suggèrent des fonctions plutôt "en vrac" du code dans un fichier, et même mieux, les modules (.psm1 fichiers). Et essayer d'éviter l'Expression de Invoke (voir Invoke-Expression Considéré comme Nocif ).
OriginalL'auteur Chris L | 2014-08-15
Vous devez vous connecter pour publier un commentaire.
Après la publication de la question, je suis tombé sur la réponse. Pour être complet c'est ici:
bar.ps1:
Choisi la valeur 2 pour le paramètre "-b" n'est pas approprié parce que foo.ps1 contient ValidateSet avec des valeurs de 0,1.
Vous avez sauvé ma ..... Merci beaucoup!
Agréable et propre :). Gaspillé beaucoup de temps à essayer de passer le args :/.
J'ai argument $dirPath avec des espaces dans le chemin d'accès. Exemple: "D:\work dir\app". Et il renvoie une erreur lors du passage comme ceci: $args += ("-appDir", "$dirPath"). J'obtiens l'erreur: "Le terme "D:\work' n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou d'un programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès a été inclus, vérifiez que le chemin d'accès est correct et d essayer à nouveau." Comment pats chemin avec des espaces?
OriginalL'auteur Chris L