L'obtention de tous les Paramètres Nommés à partir de Powershell vides compris, et régler
J'essaie de trouver un moyen d'obtenir toutes les informations sur les paramètres d'un script powershell. Ex script:
function test()
{
Param(
[string]$foo,
[string]$bar,
[string]$baz = "baz"
)
foreach ($key in $MyInvocation.BoundParameters.keys)
{
write-host "Parameter: $($key) -> $($MyInvocation.BoundParameters[$key])"
}
}
test -foo "foo!"
J'aimerais obtenir les valeurs de $bar
et $baz
de façon dynamique, sans connaître les noms des paramètres à l'avance.
J'ai regardé à travers $MyInvocation
propriétés et de méthodes mais je ne vois pas autre chose que les paramètres définis/passé.
Mise à jour 1:
Je suis proche de l'obtenir avec:
function test()
{
Param(
[string]$foo,
[string]$bar,
[string]$baz = "baz"
)
foreach($var in (get-variable -scope private))
{
write-host "$($var.name) -> $($var.value)"
}
}
test -foo "foo!"
Si je pouvais filtrer les paramètres de script vs les paramètres par défaut, je serais bon pour aller.
Mise à jour 2:
Le final de la solution de travail ressemble à ceci:
function test {
param (
[string] $Bar = 'test'
, [string] $Baz
, [string] $Asdf
)
$ParameterList = (Get-Command -Name $MyInvocation.InvocationName).Parameters;
foreach ($key in $ParameterList.keys)
{
$var = Get-Variable -Name $key -ErrorAction SilentlyContinue;
if($var)
{
write-host "$($var.name) > $($var.value)"
}
}
}
test -asdf blah;
OriginalL'auteur Eric Longstreet | 2014-02-04
Vous devez vous connecter pour publier un commentaire.
Cochez cette solution. Il utilise la
CmdletBinding()
attribut, qui fournit des métadonnées supplémentaires grâce à l'utilisation de la$PSCmdlet
variable intégrée. Vous pouvez:$PSCmdlet
Get-Command
Get-Variable
applet de commandeCode:
Sortie
La sortie de la commande ressemble à ceci:
Heureux d'entendre cela a fonctionné pour vous. 🙂
Je pense que vous pouvez ignorer le
$PSCmdlet
etGet-Command
et il suffit d'utiliser$MyInvocation.MyCommand.Parameters
, et que vous pouvez simplement en boucle surParameters.Keys
pour obtenir les noms des paramètres.Également intéressant de noter que
$PSCmdlet
ne fonctionne que si vous avez explicite[CmdletBinding()]
, alors que$MyInvocation.MyCommand
fonctionne pour toutes les fonctions.OriginalL'auteur Trevor Sullivan
La lecture de la valeur dynamiquement utiliser le
get-variable
fonction /applet de commandePour imprimer tous les paramètres, procédez de la manière suivante
ma mise à jour de l'échantillon ne pas utiliser toute la correction des noms. Il va tout droit à travers le paramètre de limite de la liste
Désolé manqué, cependant, il ressemble $MyInvocation.BoundParameters.les touches ne contient pas de $bar et $baz, seule réelle bornée paramètres. Je suis vraiment intéressé à obtenir $baz qui pourraient avoir une valeur par défaut définie déjà et n'est jamais passé
OriginalL'auteur JaredPar
J'ai trouvé cela plus utile pour la PS4 (Windows 2012 R2) - il comprend par défaut les valeurs /paramètres optionnels:
OriginalL'auteur cslotty
J'ai joué avec les 2 solutions que j'ai aimé dans ce fil, ils travaillent tous les deux.
cependant j'avais besoin pour produire une erreur sur le paramètre absent pour un script de compilation
OriginalL'auteur Kelly Davis
Espérons-le, certains peuvent trouver ce one-liner utile:
Résultat
OriginalL'auteur Janos