PowerShell Passer des paramètres Nommés à ArgumentList
J'ai un script PowerShell qui accepte 3 paramètres nommés. S'il vous plaît laissez-moi savoir comment passer de la même ligne de commande. J'ai essayé le code ci-dessous mais n'est pas le travail. Il affecte la totalité de la valeur de P3. Mon exigence est que P1 doit contenir 1, P2 devrait 2 et P3 doit être attribué 3.
Invoke-Command -ComputerName server -FilePath "D:\test.ps1" -ArgumentList { -P1 1 -P2 2 -P3 3}
Ihe ci-dessous le fichier de script de code.
Param (
[string]$P3,
[string]$P2,
[string]$P1
)
Write-Output "P1 Value :" $P1
Write-Output "P2 Value:" $P2
Write-Output "P3 Value :" $P3
double possible de Comment puis-je passer les paramètres nommés avec Invoke-Command?
OriginalL'auteur Parveen Kumar | 2015-01-06
Vous devez vous connecter pour publier un commentaire.
Une option:
Pouvez-vous s'il vous plaît laissez-moi savoir comment obtenir le même à l'aide de code C# comme mon exigence est d'exécuter ce script PowerShell à partir de C#.
Désolé, je ne sais pas C# suffisamment bien pour convertir que pour vous.
Ce code fonctionne très bien jusqu'à ce que vous avez un tableau comme paramètre. Lorsque cela se produit, vous obtenez juste "du Système.String[]" en tant que valeur depuis le bloc param est en fait un .ToString() quand il fait étendu. Je n'ai pas encore trouver un moyen fiable d'éviter ce problème, si quelqu'un a une solution je serais ravi de le voir!
Essayez P3 = "@('a','b','c')"
OriginalL'auteur mjolinor
Utiliser une table de hachage :
regarde ce post stackoverflow.com/a/4226027/381149
Cela ne fonctionne pas—l'ensemble de la table de hachage est passé comme premier argument. Les docs disent que les arguments doivent être une liste séparée par des virgules (tableau non-associatif) (source).
OriginalL'auteur Loïc MICHEL
Le code par mjolinor fonctionne très bien, mais il m'a fallu plusieurs minutes pour comprendre.
Le code fait une chose simple - génère un contenu de bloc de script avec les paramètres intégrés:
Ensuite ce bloc de script est transmis à la Commande Invoke-command.
Pour simplifier le code:
Nous allons faire une base de C# de mise en œuvre:
Le code génère une temporaire de script et l'exécute.
Exemple de script:
$(&{args})
? J'essaie de comprendre comment cela se combine avec@params
pour vous donner une chaîne comme "-P1 1 -P2 2 -P3 3".Travail de l'intérieur, {$args} est un bloc de script qui retourne simplement quels que soient les arguments qu'il a été donné. &{args} exécute le bloc de script. En l'enveloppant dans $() - $(&{$args}) en fait une sous-expression, de sorte qu'il se développe au sein de la chaîne. Parce que l'argument donné est une table de hachage, le résultat est un ensemble de paires clé/valeur - le résultat de la splatting d'utilisation, comme cela a été adoptée pour le bloc de script.
OriginalL'auteur Der_Meister