web-dev-qa-db-fra.com

Comment passer les paramètres nécessaires au script dans Powershell ISE?

Voir le titre.

J'ai spécifié les paramètres nécessaires dans la tête d'un script:

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Quand je veux déboguer le script avec Powershell ISE: comment puis-je remplir ces paramètres?

69
eckes

Utilisez le volet de commandes. Ouvrez le fichier de script dans l'éditeur ISE, définissez les points d'arrêt (F9). Ensuite, dans le volet de commandes, tapez une commande appelant ce script avec les paramètres requis. Je ne pense pas qu'il existe une autre façon (intégrée) de faire cela dans ISE.

70
Roman Kuzmin
  1. Ouvrez le script (myscript.ps1) dans Windows Powershell ISE
  2. Presse F9 à la variable que vous souhaitez inspecter (débogage). Par exemple, la deuxième ligne de l'exemple ci-dessous où la variable $ outputText est affectée
  3. Dans la fenêtre Shell, indiquez le chemin relatif du script ainsi que la valeur param. Par exemple:.\Myscript.ps1 "ma valeur"
  4. Appuyez sur Entrée (vous n'avez pas besoin de frapper F5)
  5. Vous pourrez voir les points d'arrêt de débogage en surbrillance de couleur jaune. Placez votre curseur sur la variable souhaitée pour inspecter la valeur actuelle.

A sample showing PowerShell debugging with ISE and command parameter

22
Ashraf Alam

Il y a une autre manière. Vous pouvez utiliser la variable automatique $PSDefaultParameterValues, Qui existe (depuis la v3) pour fournir de nouveaux arguments par défaut aux applets de commande et fonctions avancées (doesn ' t fonctionne avec des fonctions normales). Cependant, cela fonctionne pour les scripts, même lors du débogage dans ISE. Vous devez déclarer [CmdletBinding()] ou [Parameter()] comme vous le feriez pour une fonction avancée.

Donc, pour votre exemple,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

vous exécuteriez quelque chose comme ceci sur l'invite ISE:

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

Vous pouvez également définir la valeur du paramètre sur un bloc de script qui s'exécutera automatiquement au moment de l'exécution:

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

La variable est une table de hachage et toute la syntaxe standard s'applique, sauf que la touche doit avoir le nom du script (ou la fonction avancée ou l'applet de commande) suivi d'un deux-points puis le nom du paramètre. Vous pouvez définir des valeurs par défaut pour plusieurs scripts ou commandes, et plusieurs paramètres pour chacun (chaque paramètre est une nouvelle entrée de table).

En le faisant de cette façon, vous pouvez simplement frapper F5 pour exécuter votre script comme d'habitude. Les paramètres seront extraits de la variable, vous n'avez donc rien à taper.

D'autres cas d'utilisation pour $PSDefaultParameterValues Peuvent être des personnalisations, comme si Get-History n'obtient que les 10 dernières entrées, sauf si vous spécifiez le paramètre -Count Dans la commande. Étant donné que les entrées ne persistent que pour la session en cours, vous souhaitez ajouter des personnalisations à votre profil . Vous pouvez en savoir plus en tapant Get-Help about_Parameters_Default_Values À l'invite ou afficher les mêmes informations sur TechNet .

15
PatrickFranchise