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